ISS Tracks do not trace circles on the flat earth map! The red dots show distances traveled in the same time. Note that the distances between two points are about 3 times greater in the southern hemisphere than in the northern hemisphere, meaning the ISS travels 3 times faster in the southern hemisphere than in the northern hemisphere.
var excentr = 51.6; var period = 360 * (1 - 15.652/360); var nOrbits = 360 / 15; var EarthMap = ... var graph = NewGraph2D( { Id: 'JsGraph1', Width: '100%', Height: '100%', DrawFunc: DrawModel, AutoReset: true, AutoClear: true, AutoScalePix: true } ); function DrawModel( g ) { g.SetAngleMeasure( 'deg' ); var VpScaleArgs = true; var VpClip = false; var VpLeft = 8; var VpTop = 8; var VpRight = -8; var VpBottom = -8; g.SetViewport( VpLeft, VpTop, VpRight, VpBottom, VpScaleArgs, VpClip ); var WinXmin = -180; var WinXmax = 180; var WinYmin = -180; var WinYmax = 180; var WinWidth = 360; var WinHeight = 360; g.SetWindowWH( WinXmin, WinYmin, WinWidth, WinHeight ); DrawEarthMap( g ); // draw some iss tracks var step = 5; var last = nOrbits * period; g.NewPoly(); for (var pos = 0; pos <= last; pos += step) { var lat = 90 - excentr * Math.sin( 2 * Math.PI * pos / period ); var a = pos * Math.PI / 180; var x = lat * Math.cos( a ); var y = lat * Math.sin( a ); g.AddPointToPoly( x, y ); } g.SetLineAttr( '#888', 1 ); g.DrawPoly( 1 ); var first = 0.9 * nOrbits * period; var last = first + 2.5 * period; g.NewPoly(); for (var pos = first; pos <= last; pos += step) { var lat = 90 - excentr * Math.sin( 2 * Math.PI * pos / period ); var a = pos * Math.PI / 180; var x = lat * Math.cos( a ); var y = lat * Math.sin( a ); g.AddPointToPoly( x, y ); } g.SetLineAttr( 'red', 2 ); g.DrawPoly( 1 ); var first = 0.9 * nOrbits * period; var last = first + 2.5 * period; g.NewPoly(); for (var pos = first; pos <= last; pos += 2*step) { var lat = 90 - excentr * Math.sin( 2 * Math.PI * pos / period ); var a = pos * Math.PI / 180; var x = lat * Math.cos( a ); var y = lat * Math.sin( a ); g.AddPointToPoly( x, y ); } g.SetMarkerAttr( 'Circle', 5, 'red', 'white', 1 ); g.DrawPolyMarker( 3 ); }