Skip to content

Instantly share code, notes, and snippets.

@blech
Last active August 29, 2015 13:57
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save blech/9822628 to your computer and use it in GitHub Desktop.
Save blech/9822628 to your computer and use it in GitHub Desktop.
LEO vs geostationary

Geostationary (black), semi-synchronous (grey) and low earth (red) orbits compared.

<!DOCTYPE html>
<meta charset="utf-8">
<title>LEO and geostationary. husk.org.</title>
<body>
<script src="http://d3js.org/d3.v3.min.js"></script>
<script src="http://d3js.org/topojson.v1.min.js"></script>
<script>
var width = 900,
height = 900;
var projection = d3.geo.orthographic()
.scale(64) // 6400km radius -> 64 pixels
.translate([width / 2, height / 2])
.rotate([0, 270, 0])
.clipAngle(90);
var canvas = d3.select("body").append("canvas")
.attr("width", width)
.attr("height", height);
var c = canvas.node().getContext('2d');
var path = d3.geo.path()
.projection(projection)
.context(c);
d3.json("/d/5879060/world-110m.json", function(error, world) {
var land = topojson.feature(world, world.objects.land),
globe = {type: "Sphere"};
c.clearRect(0, 0, width, height);
c.fillStyle = 'rgba(255,255,255,1)',
c.beginPath(),
path(globe),
c.fill(),
c.stroke();
c.fillStyle = 'rgba(204,204,204,.75)',
c.beginPath(),
path(land),
c.fill();
// LEO
c.beginPath();
c.arc(width/2, height/2, 65, 0, Math.PI*2, false); // 65 -> 6500km orbit radius -> 1000km orbit (actually kind of high)
c.strokeStyle = 'red';
c.stroke();
// GPS (semi-synchronous)
c.beginPath();
c.arc(width/2, height/2, 266, 0, Math.PI*2, false); // 422 -> 42,200 km axis, 35k altitude
c.strokeStyle = '#999';
c.stroke();
// geosynchronous
c.beginPath();
c.arc(width/2, height/2, 422, 0, Math.PI*2, false); // 422 -> 42,200 km axis, 35k altitude
c.strokeStyle = 'black';
c.stroke();
});
</script>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment