Haversine formula: Difference between revisions
Content added Content deleted
(Updated to work with Nim 1.6. Using the function “degToRad” from standard library module “math”.) |
m (Grouping BASIC dialects) |
||
Line 456: | Line 456: | ||
=={{header|BASIC}}== |
=={{header|BASIC}}== |
||
==={{header|BASIC256}}=== |
|||
<syntaxhighlight lang="basic256"> |
|||
global radioTierra # radio de la tierra en km |
|||
radioTierra = 6372.8 |
|||
function Haversine(lat1, long1, lat2, long2 , radio) |
|||
d_long = radians(long1 - long2) |
|||
theta1 = radians(lat1) |
|||
theta2 = radians(lat2) |
|||
dx = cos(d_long) * cos(theta1) - cos(theta2) |
|||
dy = sin(d_long) * cos(theta1) |
|||
dz = sin(theta1) - sin(theta2) |
|||
return asin(sqr(dx*dx + dy*dy + dz*dz) / 2) * radio * 2 |
|||
end function |
|||
print |
|||
print " Distancia de Haversine entre BNA y LAX = "; |
|||
print Haversine(36.12, -86.67, 33.94, -118.4, radioTierra); " km" |
|||
end |
|||
</syntaxhighlight> |
|||
{{out}} |
|||
<pre> Distancia de Haversine entre BNA y LAX = 2887.25994877 km.</pre> |
|||
==={{header|QBasic}}=== |
|||
{{works with|QBasic|1.1}} |
|||
{{works with|QuickBasic|4.5}} |
|||
<syntaxhighlight lang="basic"> |
<syntaxhighlight lang="basic"> |
||
CONST pi = 3.141593 ' define pi |
CONST pi = 3.141593 ' define pi |
||
Line 475: | Line 501: | ||
Haversine! = (SQR(dx! * dx! + dy! * dy! + dz! * dz!) / 2) * radio * 2 |
Haversine! = (SQR(dx! * dx! + dy! * dy! + dz! * dz!) / 2) * radio * 2 |
||
END FUNCTION |
END FUNCTION</syntaxhighlight> |
||
</syntaxhighlight> |
|||
{{out}} |
{{out}} |
||
<pre> Distancia de Haversine: 2862.63 km</pre> |
|||
<pre> |
|||
Distancia de Haversine: 2862.63 km |
|||
</pre> |
|||
==={{header|True BASIC}}=== |
|||
<syntaxhighlight lang="basic">DEF Haversine (lat1, long1, lat2, long2) |
|||
OPTION ANGLE RADIANS |
|||
LET R = 6372.8 !radio terrestre en km. |
|||
LET dLat = RAD(lat2-lat1) |
|||
LET dLong = RAD(long2-long1) |
|||
LET lat1 = RAD(lat1) |
|||
LET lat2 = RAD(lat2) |
|||
LET Haversine = R *2 * ASIN(SQR(SIN(dLat/2)^2 + SIN(dLong/2)^2 *COS(lat1) * COS(lat2))) |
|||
END DEF |
|||
PRINT |
|||
PRINT "Distancia de Haversine:"; Haversine(36.12, -86.67, 33.94, -118.4); "km" |
|||
=={{header|BASIC256}}== |
|||
<syntaxhighlight |
END</syntaxhighlight> |
||
{{out}} |
|||
global radioTierra # radio de la tierra en km |
|||
<pre>Distancia de Haversine: 2887.26 km</pre> |
|||
radioTierra = 6372.8 |
|||
==={{header|Yabasic}}=== |
|||
function Haversine(lat1, long1, lat2, long2 , radio) |
|||
{{trans|FreeBASIC}} |
|||
d_long = radians(long1 - long2) |
|||
<syntaxhighlight lang="yabasic">//pi está predefinido en Yabasic |
|||
theta1 = radians(lat1) |
|||
deg2rad = pi / 180 // define grados a radianes 0.01745.. |
|||
theta2 = radians(lat2) |
|||
radioTierra = 6372.8 // radio de la tierra en km |
|||
dx = cos(d_long) * cos(theta1) - cos(theta2) |
|||
dy = sin(d_long) * cos(theta1) |
|||
dz = sin(theta1) - sin(theta2) |
|||
return asin(sqr(dx*dx + dy*dy + dz*dz) / 2) * radio * 2 |
|||
end function |
|||
sub Haversine(lat1, long1, lat2, long2 , radio) |
|||
print |
|||
d_long = deg2rad * (long1 - long2) |
|||
print " Distancia de Haversine entre BNA y LAX = "; |
|||
theta1 = deg2rad * lat1 |
|||
print Haversine(36.12, -86.67, 33.94, -118.4, radioTierra); " km" |
|||
theta2 = deg2rad * lat2 |
|||
end |
|||
dx = cos(d_long) * cos(theta1) - cos(theta2) |
|||
</syntaxhighlight> |
|||
dy = sin(d_long) * cos(theta1) |
|||
{{out}} |
|||
dz = sin(theta1) - sin(theta2) |
|||
<pre> |
|||
return asin(sqr(dx*dx + dy*dy + dz*dz) / 2) * radio * 2 |
|||
Distancia de Haversine entre BNA y LAX = 2887.25994877 km. |
|||
end sub |
|||
</pre> |
|||
print " Distancia de Haversine entre BNA y LAX = ", Haversine(36.12, -86.67, 33.94, -118.4, radioTierra), " km" |
|||
end</syntaxhighlight> |
|||
{{out}} |
|||
<pre> Distancia de Haversine entre BNA y LAX = 259.478 km</pre> |
|||
=={{header|BBC BASIC}}== |
=={{header|BBC BASIC}}== |
||
Line 3,670: | Line 3,704: | ||
2887.2594934 |
2887.2594934 |
||
</pre> |
</pre> |
||
=={{header|True BASIC}}== |
|||
<syntaxhighlight lang="basic"> |
|||
DEF Haversine (lat1, long1, lat2, long2) |
|||
OPTION ANGLE RADIANS |
|||
LET R = 6372.8 !radio terrestre en km. |
|||
LET dLat = RAD(lat2-lat1) |
|||
LET dLong = RAD(long2-long1) |
|||
LET lat1 = RAD(lat1) |
|||
LET lat2 = RAD(lat2) |
|||
LET Haversine = R *2 * ASIN(SQR(SIN(dLat/2)^2 + SIN(dLong/2)^2 *COS(lat1) * COS(lat2))) |
|||
END DEF |
|||
PRINT |
|||
PRINT "Distancia de Haversine:"; Haversine(36.12, -86.67, 33.94, -118.4); "km" |
|||
END |
|||
</syntaxhighlight> |
|||
{{out}} |
|||
<pre> |
|||
Distancia de Haversine: 2887.26 km |
|||
</pre> |
|||
=={{header|TypeScript}}== |
=={{header|TypeScript}}== |
||
Line 4,018: | Line 4,029: | ||
2886.444 |
2886.444 |
||
</pre> |
</pre> |
||
=={{header|Yabasic}}== |
|||
{{trans|FreeBASIC}} |
|||
<syntaxhighlight lang="yabasic"> |
|||
//pi está predefinido en Yabasic |
|||
deg2rad = pi / 180 // define grados a radianes 0.01745.. |
|||
radioTierra = 6372.8 // radio de la tierra en km |
|||
sub Haversine(lat1, long1, lat2, long2 , radio) |
|||
d_long = deg2rad * (long1 - long2) |
|||
theta1 = deg2rad * lat1 |
|||
theta2 = deg2rad * lat2 |
|||
dx = cos(d_long) * cos(theta1) - cos(theta2) |
|||
dy = sin(d_long) * cos(theta1) |
|||
dz = sin(theta1) - sin(theta2) |
|||
return asin(sqr(dx*dx + dy*dy + dz*dz) / 2) * radio * 2 |
|||
end sub |
|||
print " Distancia de Haversine entre BNA y LAX = ", Haversine(36.12, -86.67, 33.94, -118.4, radioTierra), " km" |
|||
end |
|||
</syntaxhighlight> |
|||
{{out}} |
|||
<pre> |
|||
Distancia de Haversine entre BNA y LAX = 259.478 km |
|||
</pre> |
|||
=={{header|zkl}}== |
=={{header|zkl}}== |