Haversine formula: Difference between revisions

Content added Content deleted
Line 1,513: Line 1,513:


Since it was trivial, this functions returns the distance in miles and kilometers.
Since it was trivial, this functions returns the distance in miles and kilometers.
<lang futurebasic>
<lang futurebasic>window 1
include "ConsoleWindow"


local fn Haversine( lat1 as double, lon1 as double, lat2 as double, lon2 as double, miles as ^double, kilometers as ^double )
local fn Haversine( lat1 as double, lon1 as double, lat2 as double, lon2 as double, miles as ^double, kilometers as ^double )
dim as double deg2rad, dLat, dLon, a, c, earth_radius_miles, earth_radius_kilometers
double deg2rad, dLat, dLon, a, c, earth_radius_miles, earth_radius_kilometers

earth_radius_miles = 3959.0 // Radius of the Earth in miles
earth_radius_kilometers = 6372.8 // Radius of the Earth in kilometers
deg2rad = Pi / 180 // Pi is predefined in FutureBasic
earth_radius_miles = 3959.0 // Radius of the Earth in miles
dLat = deg2rad * ( lat2 - lat1 )
earth_radius_kilometers = 6372.8 // Radius of the Earth in kilometers
dLon = deg2rad * ( lon2 - lon1 )
deg2rad = Pi / 180 // Pi is predefined in FutureBasic
a = sin( dLat / 2 ) * sin( dLat / 2 ) + cos( deg2rad * lat1 ) * cos( deg2rad * lat2 ) * sin( dLon / 2 ) * sin( dLon / 2 )
c = 2 * asin( sqr(a) )
dLat = deg2rad * ( lat2 - lat1 )

dLon = deg2rad * ( lon2 - lon1 )
miles.nil# = earth_radius_miles * c
a = sin( dLat / 2 ) * sin( dLat / 2 ) + cos( deg2rad * lat1 ) * cos( deg2rad * lat2 ) * sin( dLon / 2 ) * sin( dLon / 2 )
kilometers.nil# = earth_radius_kilometers * c
c = 2 * asin( sqr(a) )
miles.nil# = earth_radius_miles * c
kilometers.nil# = earth_radius_kilometers * c
end fn
end fn


dim as double miles, kilometers
double miles, kilometers

fn Haversine( 36.12, -86.67, 33.94, -118.4, @miles, @kilometers )
fn Haversine( 36.12, -86.67, 33.94, -118.4, @miles, @kilometers )


Line 1,538: Line 1,538:
print "Distance in kilometers between BNA LAX: "; using "####.####"; kilometers; " km."
print "Distance in kilometers between BNA LAX: "; using "####.####"; kilometers; " km."


</lang>
HandleEvents</lang>
Output:
Output:
<pre>
<pre>