Sign in to follow this  
n4gix

Great Circle

Recommended Posts

Ok... here's a challenge. *sigh*In a GPS Direct To flight plan there are only 2 waypoints. One can not simply draw a straight line from point a to point b and see the navigation track. It has to be rendered in an arc because it follows a great circle.I've yet to figure out how to accomplish this math-wise. Anyone have ideas/suggestions/info?

Share this post


Link to post
Share on other sites
Help AVSIM continue to serve you!
Please donate today!

Hi,I use these ones for bearing and distance. 1 (from gps):(A:PLANE LATITUDE,degrees) (>@c:GeoCalcLatitude1,degrees) (A:PLANE LONGITUDE,degrees) (>@c:GeoCalcLongitude1,degrees) (L:set coordinate lat,number) (>@c:GeoCalcLatitude2,degrees) (L:set coordinate lon,number) (>@c:GeoCalcLongitude2,degrees) (@c:GeoCalcBearing,degrees) (A:MAGVAR,degrees) - (>L:FromToBearing,degrees) (@c:GeoCalcDistance,nmiles) (>L:FromToDistance,nmiles) 2 (without gps var's):(L:set coordinate lat,number) dgrd (>L:Lat2rad,number) (A:PLANE LATITUDE,degrees) dgrd (>L:Lat1rad,number) (L:set coordinate lon,number) (A:PLANE LONGITUDE,degrees) - dgrd (>L:DiffLonrad,number) (L:Lat1rad,number) sin (L:Lat2rad,number) sin * (L:Lat1rad,number) cos (L:Lat2rad,number) cos * (L:DiffLonrad,number) cos * + acos (>L:irs distance,number) (L:Lat2rad,number) sin (L:Lat1rad,number) sin (L:irs distance,number) cos * - (L:Lat1rad,number) cos (L:irs distance,number) sin * / acos rddg (>L:irs heading,number) (L:DiffLonrad,number) sin 0 < if{ 360 (L:irs heading,number) - (>L:irs heading,number) } (L:irs heading,number) (A:MAGVAR,degrees) - near 360 + 360 % d (>L:irs heading,number) The L var names for coordinates, heading and distance are from my panel, any name is ok.Instead of plane position define any other. see:http://forums.avsim.net/dcboard.php?az=sho...ing_type=searchHope it helps,Jan"Beatus ille qui procul negotiis..."

Share this post


Link to post
Share on other sites

It mostly depend on the projection type you choose for the display! the Reality XP Sandel use a mercator projection, and I've created a complex function to draw the curve arcs. However, in the Airbus, I use a anzimuthal projection which is less sensible to deformations (and cope well so far in drawing straight lines).Basically, I approximate the curve with a series of well chosen segment lengths. It depends on the range factor and GC dist for the segment.Hope this helps!

Share this post


Link to post
Share on other sites

>It mostly depend on the projection type you choose for the>display! the Reality XP Sandel use a mercator projection, and>I've created a complex function to draw the curve arcs.>However, in the Airbus, I use a anzimuthal projection which is>less sensible to deformations (and cope well so far in drawing>straight lines).>>Basically, I approximate the curve with a series of well>chosen segment lengths. It depends on the range factor and GC>dist for the segment.>>Hope this helps!So... how are you defining the arc radius?

Share this post


Link to post
Share on other sites

>Hi,>>I use these ones for bearing and distance. >1 (from gps):>(A:PLANE LATITUDE,degrees) (>@c:GeoCalcLatitude1,degrees) >(A:PLANE LONGITUDE,degrees) (>@c:GeoCalcLongitude1,degrees) >(L:set coordinate lat,number) (>@c:GeoCalcLatitude2,degrees) >(L:set coordinate lon,number) (>@c:GeoCalcLongitude2,degrees)>>(@c:GeoCalcBearing,degrees) (A:MAGVAR,degrees) ->(>L:FromToBearing,degrees) >(@c:GeoCalcDistance,nmiles) (>L:FromToDistance,nmiles) >>2 (without gps var's):>(L:set coordinate lat,number) dgrd (>L:Lat2rad,number) >(A:PLANE LATITUDE,degrees) dgrd (>L:Lat1rad,number) >(L:set coordinate lon,number) (A:PLANE LONGITUDE,degrees) ->dgrd (>L:DiffLonrad,number) >(L:Lat1rad,number) sin (L:Lat2rad,number) sin *>(L:Lat1rad,number) cos (L:Lat2rad,number) cos *>(L:DiffLonrad,number) cos * + acos (>L:irs distance,number) >(L:Lat2rad,number) sin (L:Lat1rad,number) sin (L:irs>distance,number) cos * - (L:Lat1rad,number) cos (L:irs>distance,number) sin * / acos rddg (>L:irs heading,number) >(L:DiffLonrad,number) sin 0 < if{ 360 (L:irs heading,number) ->(>L:irs heading,number) } >(L:irs heading,number) (A:MAGVAR,degrees) - near 360 + 360 % d>(>L:irs heading,number) >>The L var names for coordinates, heading and distance are from>my panel, any name is ok.>Instead of plane position define any other. >>see:>http://forums.avsim.net/dcboard.php?az=sho...ing_type=search>>Hope it helps,>>>Jan>>"Beatus ille qui procul negotiis..."Also not what I asked... but thanks. :)

Share this post


Link to post
Share on other sites

Well, I don't define the arc radius per-see, I travel along the GC heading for a given distance, and this gives me a lat/lon point I can draw a segment between. If choosen not too loose but not too close (to save computation/drawing time), you can approximate the arc via a series of segments quite nicely. I've tested this against the GNS 430/Sandel gauge and both were giving quite similar results, for 2 distant points when flying in the middle of the distance of the two.

Share this post


Link to post
Share on other sites

>Well, I don't define the arc radius per-see, I travel along>the GC heading for a given distance, and this gives me a>lat/lon point I can draw a segment between. If choosen not too>loose but not too close (to save computation/drawing time),>you can approximate the arc via a series of segments quite>nicely. I've tested this against the GNS 430/Sandel gauge and>both were giving quite similar results, for 2 distant points>when flying in the middle of the distance of the two.Ok... was hoping there was a simple method to do this... guess not. ;)

Share this post


Link to post
Share on other sites

>>hi,>>You can found the Great circle math-formula in the aviation>>Formulary V1.43:>>>>http://williams.best.vwh.net/avform.htm>>>>cheers>>Not what I asked, but thanks. ;)Don't be so hasty! You can use this to calculate any intermediate points along the arc based on some fraction of the total distance between the end points:------------------------------------------Intermediate points on a great circleIn previous sections we have found intermediate points on a great circle given either the crossing latitude or longitude. Here we find points (lat,lon) a given fraction of the distance (d) between them. Suppose the starting point is (lat1,lon1) and the final point (lat2,lon2) and we want the point a fraction f along the great circle route. f=0 is point 1. f=1 is point 2. The two points cannot be antipodal ( i.e. lat1+lat2=0 and abs(lon1-lon2)=pi) because then the route is undefined. The intermediate latitude and longitude is then given by: A=sin((1-f)*d)/sin(d) B=sin(f*d)/sin(d) x = A*cos(lat1)*cos(lon1) + B*cos(lat2)*cos(lon2) y = A*cos(lat1)*sin(lon1) + B*cos(lat2)*sin(lon2) z = A*sin(lat1) + B*sin(lat2) lat=atan2(z,sqrt(x^2+y^2)) lon=atan2(y,x)------------------------------------------Take the total distance between the two end points, then divide that by some arbitrary number of points you wish to calculate, then draw your segments accordingly!f=0.0-----departure apt = lat1,lon1f=0.2-----intermediate point at 2/10ths totalf=0.4f=0.6f=0.8f=1.0-----destination apt = lat2,lon2The number of "calculated intermediate points" could be based on the total distance. If < 500nm use 4 points, >500 & < 1000, use 6 points, etc.

Share this post


Link to post
Share on other sites

It will take more points than that to show the aircraft actually on the route.

Share this post


Link to post
Share on other sites

>It will take more points than that to show the aircraft>actually on the route.Granted... however if the calculation is written as a func(); you can call it as often as desired in realtime to keep track of your track... :)Let's see, "now I'm here, and there is where I'll wind up, where will I be in - say - another 10nm?"For that matter, how long would it take to calculate and populate an array of - say - 100 points? 1000 points?

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this