|
|
(One intermediate revision by one other user not shown) |
Line 1: |
Line 1: |
| The '''haversine formula''' is an equation important in [[navigation]], giving [[great-circle distance]]s between two points on a [[sphere]] from their [[longitude]]s and [[latitude]]s. It is a special case of a more general formula in [[spherical trigonometry]], the '''law of haversines''', relating the sides and angles of spherical triangles. The term ''haversine'' was coined in 1835 by Prof. [[James Inman]].
| | Greetings! I am Dalton. Acting has been a thing that Now i'm totally addicted to. My house is now in Vermont and I don't wish on changing it. I am a cashier. I'm not high-quality at webdesign but additionally post want to check some of my website: http://prometeu.net<br><br>my web-site: hack clash of clans ([http://prometeu.net just click the following internet page]) |
| | |
| These names follow from the fact that they are customarily written in terms of the [[versine|haversine]] function, given by haversin(θ) = sin<sup>2</sup>(θ/2). The formulas could equally be written in terms of any multiple of the haversine, such as the older [[versine]] function (twice the haversine). The haversine had, perhaps, a slight advantage in that its maximum is one, so that [[logarithm]]ic tables of its values could end at zero. These days, the haversine form is also convenient in that it has no coefficient in front of the sin<sup>2</sup> function.
| |
| | |
| ==The haversine formula==
| |
| For any two points on a sphere, the haversine of the [[central angle]] between them is given by
| |
| :<math>\operatorname{haversin}\left(\frac{d}{r}\right) = \operatorname{haversin}(\phi_2 - \phi_1) + \cos(\phi_1) \cos(\phi_2)\operatorname{haversin}(\lambda_2-\lambda_1)</math>
| |
| where
| |
| * ''haversin'' is the [[haversine]] function:
| |
| :<math>\operatorname{haversin}(\theta)=\sin^2\left(\frac{\theta}{2}\right)=\frac{1-\cos(\theta)}{2}</math>
| |
| * ''d'' is the distance between the two points (along a [[great circle]] of the sphere; see [[Great-circle distance|spherical distance]]),
| |
| * ''r'' is the radius of the sphere,
| |
| * <math>\phi_1, \phi_2</math>: latitude of point 1 and latitude of point 2
| |
| * <math>\lambda_1, \lambda_2</math>: longitude of point 1 and longitude of point 2
| |
| | |
| On the left side of the equals sign d/r is the central angle, assuming angles are measured in [[radian]]s (note that φ and λ can be converted from degrees to radians by multiplying by π/180 as usual).
| |
| | |
| Solve for ''d'' by applying the inverse haversine (if available) or by using the [[arcsine]] (inverse sine) function:
| |
| | |
| :<math>d = r \operatorname{haversin}^{-1}(h) = 2 r \arcsin\left(\sqrt{h}\right)</math>
| |
| where ''h'' is haversin(''d''/''r''), or more explicitly:
| |
| :<math>d = 2 r \arcsin\left(\sqrt{\operatorname{haversin}(\phi_2 - \phi_1) + \cos(\phi_1) \cos(\phi_2)\operatorname{haversin}(\lambda_2-\lambda_1)}\right)</math>
| |
| ::<math> = 2 r \arcsin\left(\sqrt{\sin^2\left(\frac{\phi_2 - \phi_1}{2}\right) + \cos(\phi_1) \cos(\phi_2)\sin^2\left(\frac{\lambda_2 - \lambda_1}{2}\right)}\right)</math>
| |
| | |
| When using these formulae, ensure that ''h'' does not exceed 1 due to a [[floating point]] error (''d'' is only [[real number|real]] for ''h'' from 0 to 1). ''h'' only approaches 1 for ''antipodal'' points (on opposite sides of the sphere) — in this region, relatively large numerical errors tend to arise in the formula when finite precision is used. Because ''d'' is then large (approaching π''R'', half the circumference) a small error is often not a major concern in this unusual case (although there are other [[great-circle distance]] formulas that avoid this problem). (The formula above is sometimes written in terms of the [[arctangent]] function, but this suffers from similar numerical problems near ''h'' = 1.)
| |
| | |
| As described below, a similar formula can be written using cosines (sometimes called the [[spherical law of cosines]], not to be confused with the [[law of cosines]] for plane geometry) instead of haversines, but if the two points are close together (e.g. a kilometer apart, on the Earth) you might end up with cos (d/R) = 0.99999999, leading to an inaccurate answer. Since the haversine formula uses sines it avoids that problem.
| |
| | |
| Either formula is only an approximation when applied to the [[Earth]], which is not a perfect sphere: the "[[Earth radius]]" ''R'' varies from 6356.752 km at the poles to 6378.137 km at the equator. More importantly, the [[radius of curvature (applications)|radius of curvature]] of a north-south line on the earth's surface is 1% greater at the poles (≈6399.594 km) than at the equator (≈6335.439 km)— so the haversine formula and law of cosines can't be guaranteed correct to better than [http://www.movable-type.co.uk/scripts/latlong.html 0.5%]. More accurate methods that consider the Earth's ellipticity are given by [[Vincenty's formulae]] and the other formulas in the [[geographical distance]] article.
| |
| | |
| ==The law of haversines==
| |
| Given a unit sphere, a "triangle" on the surface of the sphere is defined by the [[great circle]]s connecting three points '''u''', '''v''', and '''w''' on the sphere. If the lengths of these three sides are ''a'' (from '''u''' to '''v'''), ''b'' (from '''u''' to '''w'''), and ''c'' (from '''v''' to '''w'''), and the angle of the corner opposite ''c'' is ''C'', then the law of haversines states:
| |
| <div class="floatright">''(the law of haversines)''</div>
| |
| :<math>\operatorname{haversin}(c) = \operatorname{haversin}(a - b) + \sin(a) \sin(b) \, \operatorname{haversin}(C).</math> | |
| | |
| Since this is a unit sphere, the lengths ''a'', ''b'', and ''c'' are simply equal to the angles (in [[radian]]s) subtended by those sides from the center of the sphere (for a non-unit sphere, each of these arc lengths is equal to its [[central angle]] multiplied by the radius of the sphere).
| |
| [[Image:Law-of-haversines.svg|left|thumb|Spherical triangle solved by the law of haversines.]]
| |
| | |
| In order to obtain the haversine formula of the previous section from this law, one simply considers the special case where '''u''' is the [[Geographic North Pole|north pole]], while '''v''' and '''w''' are the two points whose separation ''d'' is to be determined. In that case, ''a'' and ''b'' are π/2 − φ<sub>1,2</sub> (i.e., 90° − latitude), ''C'' is the longitude separation Δλ, and ''c'' is the desired ''d''/''R''. Noting that sin(''π''/2 − ''φ'') = cos(''φ''), the haversine formula immediately follows.
| |
| | |
| To derive the law of haversines, one starts with the [[spherical law of cosines]]:
| |
| | |
| <div class="floatright">''(spherical law of cosines)''</div> | |
| :<math>\cos(c) = \cos(a) \cos(b) + \sin(a) \sin(b) \cos(C). \,</math>
| |
| | |
| As mentioned above, this formula is an ill-conditioned way of solving for ''c'' when ''c'' is small. Instead, we substitute the identity that cos(''θ'') = 1 − 2 haversin(''θ''), and also employ the [[trigonometric identity#Addition/subtraction theorems|addition identity]] cos(''a'' − ''b'') = cos(''a'') cos(''b'') + sin(''a'') sin(''b''), to obtain the law of haversines, above.
| |
| | |
| ==See also==
| |
| | |
| *[[Lenart Sphere]]
| |
| | |
| ==References==
| |
| * [[U. S. Census Bureau]] Geographic Information Systems FAQ, (content has been moved to [http://www.movable-type.co.uk/scripts/GIS-FAQ-5.1.html What is the best way to calculate the distance between 2 points?])
| |
| * R. W. Sinnott, "Virtues of the Haversine", ''Sky and Telescope'' '''68''' (2), 159 (1984).
| |
| * [http://mathforum.org/library/drmath/view/51879.html Deriving the haversine formula], ''Ask Dr. Math'' (Apr. 20–21, 1999).
| |
| * Romuald Ireneus 'Scibor-Marchocki, [http://www.webcitation.org/query?url=http://www.geocities.com/ResearchTriangle/2363/trig02.html&date=2009-10-25+09:44:36 Spherical trigonometry], ''Elementary-Geometry Trigonometry'' web page (1997).
| |
| * W. Gellert, S. Gottwald, M. Hellwich, H. Kästner, and H. Küstner, ''The VNR Concise Encyclopedia of Mathematics'', 2nd ed., ch. 12 (Van Nostrand Reinhold: New York, 1989).
| |
| * Oxford English Dictionary. Oxford University Press. 2nd ed. 1989. Cites coinage of term "Haversine" by Prof. Jas. Inman, D. D., in his Navigation and Nautical Astronomy, 3rd ed. (1835).
| |
| | |
| == External links ==
| |
| * [http://www.codecodex.com/wiki/Calculate_Distance_Between_Two_Points_on_a_Globe The Haversine formula implemented in 16 languages]
| |
| * [http://www.movable-type.co.uk/scripts/LatLong.html JavaScript implementation] of Haversine formula to find distance between two latitude/longitude points
| |
| * [http://blog.julien.cayzac.name/2008/10/arc-and-distance-between-two-points-on.html C++ implementation] of Haversine formula to find distance between two latitude/longitude points
| |
| * [http://www.esawdust.com/blog/gps/files/HaversineFormulaInRuby.html Ruby implementation] of Haversine formula to find distance between two latitude/longitude points
| |
| * [http://www.platoscave.net/blog/2009/oct/5/calculate-distance-latitude-longitude-python/ Python implementation] of Haversine formula to find distance between two latitude/longitude points
| |
| * [http://www.jaimerios.com/?p=39 MacOS C implementation] of Haversine formula to find distance between two latitude/longitude points using postal zip codes
| |
| * [http://scifunam.fisica.unam.mx/mir/codes.html#haversine Pascal implementation] of Haversine formula to find distance between two latitude/longitude points
| |
| * [http://samoht.fr/informatique/distance-between-two-points-on-earth-surface-haversine-formula Matlab implementation] of Haversine formula to find distance between two latitude/longitude points
| |
| * [https://github.com/Lus71/lib_mysqludf_haversine MySQL custom UDF function implementation] to compute the Haversine formula
| |
| | |
| [[Category:Spherical trigonometry]]
| |
| [[Category:Geolocation]]
| |
| | |
| [[de:Sinus versus und Kosinus versus]]
| |