15 lines
456 B
Text
15 lines
456 B
Text
link printf
|
|
|
|
procedure main() #: Haversine formula
|
|
printf("BNA to LAX is %d km (%d miles)\n",
|
|
d := gcdistance([36.12, -86.67],[33.94, -118.40]),d*3280/5280) # with cute km2mi conversion
|
|
end
|
|
|
|
procedure gcdistance(a,b)
|
|
a[2] -:= b[2]
|
|
every (x := a|b)[i := 1 to 2] := dtor(x[i])
|
|
dz := sin(a[1]) - sin(b[1])
|
|
dx := cos(a[2]) * cos(a[1]) - cos(b[1])
|
|
dy := sin(a[2]) * cos(a[1])
|
|
return asin(sqrt(dx * dx + dy * dy + dz * dz) / 2) * 2 * 6371
|
|
end
|