Talk:Haversine formula/Alt

From Wikipedia, the free encyclopedia

The haversine formula is an equation important in navigation, giving distances between two points on a sphere from their longitudes and latitudes. 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". These names follow from the fact that they are customarily written in terms of the haversine function, defined by:

(definition of "haversine")
\operatorname{haversin}\left(\theta\right) = \sin^2\left(\frac{\theta}{2}\right)

For two points on a sphere (of radius R) with latitudes φ1 and φ2, latitude separation Δφ = φ1 − φ2, and longitude separation Δλ, the distance d between the two points (along a great circle of the sphere, as usual for spherical geometry) is related to their locations by the formula:

(the haversine formula)
\operatorname{haversin}\left(\frac{d}{R}\right) = \operatorname{haversin}(\Delta\phi) + \cos(\phi_1) \cos(\phi_2) \  \operatorname{haversin}(\Delta\lambda)

Let h denote haversin(d/R), given from above. One can then solve for d either by simply applying the inverse haversine (if available) or by using the arcsine (inverse sine) function:

d = R \, \operatorname{haversin}^{-1}(h) = 2 R \arcsin\left(\sqrt{h}\,\right)

Why haversines?

The haversine formula could of course be expressed entirely in terms of the more common trigonometric functions such as sine and cosine. But in the era before the digital calculator, the use of detailed printed tables for the haversine/inverse-haversine and its logarithm (to aid multiplications) saved navigators from squaring sines, computing square roots, etc., a process both arduous and likely to exacerbate small errors (see also versine).

The remainder of this section would have to be introduced by a discussion of why, even with computers, haversines remain popular. Since I don't really understand this well myself, I hope somebody else will write it. The section could include inter alia the following snippets I've collected from the original article:

As described below, a similar formula can also be written in terms of cosines (sometimes called the law of cosines, not to be confused with the law of cosines for plane geometry) instead of haversines, but suffers numerical precision problems for the common case of small distances/angles, which render it unsuitable for serious use.

The formulas could equally be written in terms of the versine function (twice the haversine). Historically, the haversine had, perhaps, a slight advantage in that its maximum is one, so that logarithmic 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 sin2 function.)

Although it avoids many problems associated with other systems, the haversine formula has its own weaknesses. Care must be taken to ensure that h does not exceed 1 due to a floating point error (d is only real for h from 0 to 1). But h only approaches 1 for antipodal points (ones on diametrically 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. (The formula above is sometimes written in terms of the arctangent function, but this suffers from similar numerical problems near h = 1.)

It should be noted that any of these formulae can only be an approximation when applied to the Earth, because the planet is not a perfect sphere: its radius R varies from 6356.78 km at the poles to 6378.14 km at the equator. There are small corrections, typically on the order of 0.1% (assuming the geometric mean R = 6367.45 km is used everywhere), because of this slight ellipticity of the planet.

The law of haversines

Given a unit sphere, a "triangle" on the surface of the sphere is defined by the great circles 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:

(the law of haversines)
\operatorname{haversin}(c) = \operatorname{haversin}(a - b) + \sin(a) \sin(b) \, \operatorname{haversin}(C)
triangle on a sphere


Spherical triangle solved by


the law of haversines.

Since this is a unit sphere, the lengths a, b, and c are simply equal to the angles (in radians) subtended by those sides from the center of the sphere (for a non-unit sphere, they are the distances divided by the radius).

In order to get the haversine formula of the previous section from this law, one simply considers the special case where u is the 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 - φ1,2 (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.

A proof of the law of haversines can be constructed as follows. Let u, v, and w denote the unit vectors from the center of the sphere to those corners of the triangle. Then, the lengths (angles) of the sides are given by:

\cos(a) = \mathbf{u} \cdot \mathbf{v}
\cos(b) = \mathbf{u} \cdot \mathbf{w}
\cos(c) = \mathbf{v} \cdot \mathbf{w}

To get the angle C, we need the tangent vectors ta and tb at u along the directions of sides a and b, respectively. For example, the tangent vector ta is the unit vector perpendicular to u in the u-v plane, whose direction is given by the component of v perpendicular to u. This means:

\mathbf{t}_a = \frac{\mathbf{v} - \mathbf{u} (\mathbf{u} \cdot \mathbf{v})}{\left| \mathbf{v} - \mathbf{u} (\mathbf{u} \cdot \mathbf{v}) \right|} = \frac{\mathbf{v} - \mathbf{u} \cos(a)}{\sin(a)}

where for the denominator we have used the Pythagorean identity sin2(a) = 1 − cos2(a). Similarly,

\mathbf{t}_b = \frac{\mathbf{w} - \mathbf{u} \cos(b)}{\sin(b)}

Then, the angle C is given by:

\cos(C) = \mathbf{t}_a \cdot \mathbf{t}_b = \frac{\cos(c) - \cos(a) \cos(b)}{\sin(a) \sin(b)}

which leads to the (spherical) law of cosines, also called the cosine rule for sides:

(spherical law of cosines)
cos(c) = cos(a)cos(b) + sin(a)sin(b)cos(C)

As mentioned above, this formula is an ill-conditioned way of solving for c in the case of small triangles. Instead, we substitute the identity that cos(θ) = 1 − 2 haversin(&theta), and also employ the addition identity cos(ab) = cos(a) cos(b) + sin(a) sin(b), to obtain the law of haversines, above.

References