Как найти расстояние между точками на сфере

Измерение расстояния и начального азимута между точками без проекционных преобразований

Содержание

  • 1 Введение
  • 2 Формулы
    • 2.1 Сферическая теорема косинусов
    • 2.2 Формула гаверсинусов
    • 2.3 Модификация для антиподов
    • 2.4 Реализация на Avenue
    • 2.5 Реализация на языке Python
    • 2.6 Реализация в Excel
    • 2.7 Проверочный набор данных
  • 3 Ссылки по теме

[править] Введение

Длина дуги большого круга – кратчайшее расстояние между любыми двумя точками находящимися на поверхности сферы, измеренное вдоль линии соединяющей эти две точки (такая линия носит название ортодромии) и проходящей по поверхности сферы или другой поверхности вращения. Сферическая геометрия отличается от обычной Эвклидовой и уравнения расстояния также принимают другую форму. В Эвклидовой геометрии, кратчайшее расстояние между двумя точками – прямая линия. На сфере, прямых линий не бывает. Эти линии на сфере являются частью больших кругов – окружностей, центры которых совпадают с центром сферы.

Начальный азимут — азимут, взяв который при начале движения из точки А, следуя по большому кругу на кратчайшее расстояние до точки B, конечной точкой будет точка B. При движении из точки A в точку B по линии большого круга азимут из текущего положения на конечную точку B постоянно меняется. Начальный азимут [angles-rhumb.html отличен от постоянного], следуя которому, азимут из текущей точки на конечную не меняется, но маршрут следования не является кратчайшим расстоянием между двумя точками.

большой круг

Через любые две точки на поверхности сферы, если они не прямо противоположны друг другу (то есть не являются антиподами), можно провести уникальный большой круг. Две точки, разделяют большой круг на две дуги. Длина короткой дуги – кратчайшее расстояние между двумя точками. Между двумя точками-антиподами можно провести бесконечное количество больших кругов, но расстояние между ними будет одинаково на любом круге и равно половине окружности круга, или pi*R, где R – радиус сферы.

расстояние большого круга

На плоскости (в прямоугольной системе координат), большие круги и их фрагменты, как было упомянуто выше, представляют собой дуги во всех проекциях, кроме гномонической, где большие круги — прямые линии. На практике это означает, что самолеты и другой авиатранспорт всегда использует маршрут минимального расстояния между точками для экономии топлива, то есть полет осуществляется по расстоянию большого круга, на плоскости это выглядит как дуга.

Маршрут Нью-Йорк — Пекин

Форма Земли может быть описана как сфера, поэтому уравнения для вычисления расстояний на большом круге важны для вычисления кратчайшего расстояния между точками на поверхности Земли и часто используются в навигации.

Вычисление расстояния этим методом более эффективно и во многих случаях более точно, чем вычисление его для спроектированных координат (в прямоугольных системах координат), поскольку, во-первых, для этого не надо переводить географические координаты в прямоугольную систему координат (осуществлять проекционные преобразования) и, во-вторых, многие проекции, если неправильно выбраны, могу привести к значительным искажениям длин в силу особенностей проекционных искажений.

Известно, что более точно описывает форму Земли не сфера, а эллипсоид, однако в данной статье рассматривается вычисление расстояний именно на сфере, для вычислений используется сфера радиусом 6372795 метров, что может привести к ошибке вычисления расстояний порядка 0.5%.

[править] Формулы

Существует три способа расчета сферического расстояния большого круга (подробнее).

[править] Сферическая теорема косинусов

В случае маленьких расстояний и небольшой разрядности вычисления (количество знаков после запятой), использование формулы может приводить к значительным ошибкам связанным с округлением. Графическое изображение формул здесь и далее — из Википедии.

Great-cirlcles-05.gif— широта и долгота двух точек в радианах

Great-cirlcles-06.gif — разница координат по долготе

Great-cirlcles-07.gif— угловая разница

сферическая теорема косинусов

Для перевода углового расстояния в метрическое, нужно угловую разницу умножить на радиус Земли (6372795 метров), единицы конечного расстояния будут равны единицам, в которых выражен радиус (в данном случае — метры).

[править] Формула гаверсинусов

Используется, чтобы избежать проблем с небольшими расстояниями.

Great-cirlcles-08.gif

[править] Модификация для антиподов

Предыдущая формула также подвержена проблеме точек-антиподов, чтобы ее решить используется следующая ее модификация.

Great-cirlcles-09.gif

[править] Реализация на Avenue

На языке Avenue, используя последнюю формулу для вычисления расстояния большого круга между двумя точками, можно использовать следующий код. Точки для вычисления передаются другим скриптом, либо добавляются в начало данного в виде pnt = point.make(long, lat) (скачать скрипт):

'pnt1, pnt2 - точки между которыми вычисляются расстояния
'pi - число pi, rad - радиус сферы (Земли), num - количество знаков после запятой
pi = 3.14159265358979
rad = 6372795
num = 7

'получение координат точек в радианах
lat1 = pnt1.getY*pi/180
lat2 = pnt2.getY*pi/180
long1 = pnt1.getX*pi/180
long2 = pnt2.getX*pi/180

'косинусы и синусы широт и разниц долгот
cl1 = lat1.cos
cl2 = lat2.cos
sl1 = lat1.sin
sl2 = lat2.sin
delta = long2 - long1
cdelta = delta.cos
sdelta = delta.sin

'вычисления длины большого круга
p1 = (cl2*sdelta)^2
p2 = ((cl1*sl2) - (sl1*cl2*cdelta))^2
p3 = (p1 + p2)^0.5
p4 = sl1*sl2
p5 = cl1*cl2*cdelta
p6 = p4 + p5
p7 = p3/p6
anglerad = (p7.atan).SetFormatPrecision (num)
dist = anglerad*rad
'
вычисление начального азимута
x = (cl1*sl2) - (sl1*cl2*cdelta)
y = sdelta*cl2
z = (-y/x).ATan.AsDegrees
if (x < 0) then z = z+180 end
z = -(z + 180 mod 360 - 180).AsRadians
anglerad2 = z - ((2*pi)*((z/(2*pi)).floor)) angledeg = (anglerad2*180)/pi

'возврат значений длины большого круга и начального азимута
distlist = {dist, angledeg}
return distlist

Для вызова процедуры расчета длин приведенной выше, можно также воспользоваться следующим скриптом, результатом его работы будет расчет длин между точкой testpont до всех точек активной темы вида и запись результата в поле Newdist атрибутивной таблицы этой темы:

atheme = av.getactivedoc.getactivethemes.get(0)
aftab = atheme.getftab
f_shape = aftab.findfield("Shape")

f_dist = aftab.findfield("dist")
f_ang = aftab.findfield("ang") 'testpoint - точка отсчета testpoint = point.make(25.85, 55.15) aftab.seteditable(true) 'для каждой точки темы до которых считают расстояния от точки отсчета for each rec in aftab pnts = {} apoint = aftab.returnvalue(f_shape, rec) pnts.add(apoint.getx) pnts.add(testpoint.getx) pnts.add(apoint.gety) pnts.add(testpoint.gety) 'Вызов процедуры расчета расстояний '"Calc-distance" - название скрипта с процедурой в проекте param = av.run("Calc-distance", pnts) aftab.setvalue(f_dist, rec, param.get(0)) aftab.setvalue(f_ang, rec, param.get(1)) end aftab.seteditable(false)

[править] Реализация на языке Python

Реализует полный вариант расчета через atan2(), более универсальнее, чем вариант для Avenue. (скачать скрипт)

import math
 
 #pi - число pi, rad - радиус сферы (Земли)
 rad = 6372795
 
 #координаты двух точек
 llat1 = 77.1539
 llong1 = -120.398
 
 llat2 = 77.1804
 llong2 = 129.55
 
 #в радианах
 lat1 = llat1*math.pi/180.
 lat2 = llat2*math.pi/180.
 long1 = llong1*math.pi/180.
 long2 = llong2*math.pi/180.
 
 #косинусы и синусы широт и разницы долгот
 cl1 = math.cos(lat1)
 cl2 = math.cos(lat2)
 sl1 = math.sin(lat1)
 sl2 = math.sin(lat2)
 delta = long2 - long1
 cdelta = math.cos(delta)
 sdelta = math.sin(delta)
 
 #вычисления длины большого круга
 y = math.sqrt(math.pow(cl2*sdelta,2)+math.pow(cl1*sl2-sl1*cl2*cdelta,2))
 x = sl1*sl2+cl1*cl2*cdelta
 ad = math.atan2(y,x)
 dist = ad*rad
 
 #вычисление начального азимута
 x = (cl1*sl2) - (sl1*cl2*cdelta)
 y = sdelta*cl2
 z = math.degrees(math.atan(-y/x))
 
 if (x < 0):
     z = z+180.
 
 z2 = (z+180.) % 360. - 180.
 z2 = - math.radians(z2)
 anglerad2 = z2 - ((2*math.pi)*math.floor((z2/(2*math.pi))) )
 angledeg = (anglerad2*180.)/math.pi
 
 print 'Distance >> %.0f' % dist, ' [meters]'
 print 'Initial bearing >> ', angledeg, '[degrees]'

[править] Реализация в Excel

Скачать пример расчета расстояния большого круга и начального азимута в Excel. Демонстрирует расчеты через закон косинусов, гаверсинус, полное уравнение и полное уравнение через atan2().

Можно также воспользоваться следующей функцией:

Public Function Distance_A_B(Lat1 As Double, Long1 As Double, Lat2 As Double, Long2 As Double)
    'определение расстояний между географическими координатами. Координаты должны быть десятичными
    'расстояние выводится в метрах

    With Application.WorksheetFunction

        Distance_A_B = .Atan2(Sin(.Pi() * Lat1 / 180) * Sin(.Pi() * Lat2 / 180) + Cos(.Pi() * Lat1 / 180) * Cos(.Pi() * Lat2 / 180) * Cos(Abs(.Pi() * Long2 / 180 - .Pi() * Long1 / 180)), _
                ((Cos(.Pi() * Lat2 / 180) * Sin(.Pi() * Long2 / 180 - .Pi() * Long1 / 180)) ^ 2 + (Cos(.Pi() * Lat1 / 180) * Sin(.Pi() * Lat2 / 180) - Sin(.Pi() * Lat1 / 180) * Cos(.Pi() * Lat2 / 180) * Cos(Abs(.Pi() * Long2 / 180 - .Pi() * Long1 / 180))) ^ 2) ^ 0.5) * 6372795

    End With

End Function

[править] Проверочный набор данных

Если все считается правильно, должны быть получены следующие результаты (координаты точек даны как широта/долгота, расстояние в метрах, начальный угол в десятичных градусах):

# Точка 1 Точка 2 Расстояние Угол
1 77.1539/-139.398 -77.1804/-139.55 17166029 180.077867811
2 77.1539/120.398 77.1804/129.55 225883 84.7925159033
3 77.1539/-120.398 77.1804/129.55 2332669 324.384112704

[править] Ссылки по теме

  • Вычисление азимута из одной точки на другую и угла образованного тремя точками на сфере
  • Вычисление постоянного азимута и длины линии румба между двумя точками для геодезических координат
  • Сравнение разных способов вычисления длин и азимутов

From Wikipedia, the free encyclopedia

The haversine formula determines the great-circle distance between two points on a sphere given their longitudes and latitudes. Important in navigation, it is a special case of a more general formula in spherical trigonometry, the law of haversines, that relates the sides and angles of spherical triangles.

The first table of haversines in English was published by James Andrew in 1805,[1] but Florian Cajori credits an earlier use by José de Mendoza y Ríos in 1801.[2][3] The term haversine was coined in 1835 by James Inman.[4][5]

These names follow from the fact that they are customarily written in terms of the haversine function, given by hav(θ) = sin2(θ/2). The formulas could equally be written in terms of any multiple of the haversine, such as the older versine function (twice the haversine). Prior to the advent of computers, the elimination of division and multiplication by factors of two proved convenient enough that tables of haversine values and logarithms were included in 19th- and early 20th-century navigation and trigonometric texts.[6][7][8] These days, the haversine form is also convenient in that it has no coefficient in front of the sin2 function.

Formulation[edit]

Let the central angle θ between any two points on a sphere be:

{displaystyle theta ={frac {d}{r}}}

where:

  • d is the distance between the two points along a great circle of the sphere (see spherical distance),
  • r is the radius of the sphere.

The haversine formula allows the haversine of θ (that is, hav(θ)) to be computed directly from the latitude (represented by φ) and longitude (represented by λ) of the two points:

{displaystyle operatorname {hav} left(theta right)=operatorname {hav} left(varphi _{2}-varphi _{1}right)+cos left(varphi _{1}right)cos left(varphi _{2}right)operatorname {hav} left(lambda _{2}-lambda _{1}right)}

where

  • φ1, φ2 are the latitude of point 1 and latitude of point 2,
  • λ1, λ2 are the longitude of point 1 and longitude of point 2.

Finally, the haversine function hav(θ), applied above to both the central angle θ and the differences in latitude and longitude, is

{displaystyle operatorname {hav} (theta )=sin ^{2}left({frac {theta }{2}}right)={frac {1-cos(theta )}{2}}}

The haversine function computes half a versine of the angle θ.

To solve for the distance d, apply the archaversine (inverse haversine) to h = hav(θ) or use the arcsine (inverse sine) function:

{displaystyle d=roperatorname {archav} (h)=2rarcsin left({sqrt {h}}right)}

or more explicitly:

{displaystyle {begin{aligned}d&=2rarcsin left({sqrt {operatorname {hav} (varphi _{2}-varphi _{1})+(1-operatorname {hav} (varphi _{1}-varphi _{2})-operatorname {hav} (varphi _{1}+varphi _{2}))cdot operatorname {hav} (lambda _{2}-lambda _{1})}}right)\&=2rarcsin left({sqrt {sin ^{2}left({frac {varphi _{2}-varphi _{1}}{2}}right)+left(1-sin ^{2}left({frac {varphi _{2}-varphi _{1}}{2}}right)-sin ^{2}left({frac {varphi _{2}+varphi _{1}}{2}}right)right)cdot sin ^{2}left({frac {lambda _{2}-lambda _{1}}{2}}right)}}right)\&=2rarcsin left({sqrt {sin ^{2}left({frac {varphi _{2}-varphi _{1}}{2}}right)+cos varphi _{1}cdot cos varphi _{2}cdot sin ^{2}left({frac {lambda _{2}-lambda _{1}}{2}}right)}}right).end{aligned}}}[9]

When using these formulae, one must ensure that h does not exceed 1 due to a floating point error (d is only real for 0 ≤ h ≤ 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) one 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 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 cannot be guaranteed correct to better than 0.5%.[citation needed] 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[edit]

Spherical triangle solved by 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:[10]

{displaystyle operatorname {hav} (c)=operatorname {hav} (a-b)+sin(a)sin(b)operatorname {hav} (C).}

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, each of these arc lengths is equal to its central angle multiplied by the radius R of the sphere).

In order to obtain 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 (that is, the, co-latitudes), C is the longitude separation λ2λ1, 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:

{displaystyle 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 when c is small. Instead, we substitute the identity that cos(θ) = 1 − 2 hav(θ), and also employ the addition identity cos(ab) = cos(a) cos(b) + sin(a) sin(b), to obtain the law of haversines, above.

Proof[edit]

One can prove the formula:

{displaystyle operatorname {hav} left(theta right)=operatorname {hav} left(varphi _{2}-varphi _{1}right)+cos left(varphi _{1}right)cos left(varphi _{2}right)operatorname {hav} left(lambda _{2}-lambda _{1}right)}

by transforming the points given by their latitude and longitude into cartesian coordinates, then taking their dot product.

Consider two points {displaystyle {bf {p_{1},p_{2}}}} on the unit sphere, given by their latitude varphi and longitude lambda :

{displaystyle {begin{aligned}{bf {p_{2}}}&=(lambda _{2},varphi _{2})\{bf {p_{1}}}&=(lambda _{1},varphi _{1})end{aligned}}}

These representations are very similar to spherical coordinates, however latitude is measured as angle from the equator and not the north pole. These points have the following representations in cartesian coordinates:

{displaystyle {begin{aligned}{bf {p_{2}}}&=(cos(lambda _{2})cos(varphi _{2}),;sin(lambda _{2})cos(varphi _{2}),;sin(varphi _{2}))\{bf {p_{1}}}&=(cos(lambda _{1})cos(varphi _{1}),;sin(lambda _{1})cos(varphi _{1}),;sin(varphi _{1}))end{aligned}}}

From here we could directly attempt to calculate the dot product and proceed, however the formulas become significantly simpler when we consider the following fact: the distance between the two points will not change if we rotate the sphere along the z-axis. This will in effect add a constant to lambda _{1},lambda _{2}. Note that similar considerations do not apply to transforming the latitudes — adding a constant to the latitudes may change the distance between the points. By choosing our constant to be -lambda _{1}, and setting {displaystyle lambda '=lambda _{2}-lambda _{1}}, our new points become:

{displaystyle {begin{aligned}{bf {p_{2}'}}&=(cos(lambda ')cos(varphi _{2}),;sin(lambda ')cos(varphi _{2}),;sin(varphi _{2}))\{bf {p_{1}'}}&=(cos(0)cos(varphi _{1}),;sin(0)cos(varphi _{1}),;sin(varphi _{1}))\&=(cos(varphi _{1}),;0,;sin(varphi _{1}))end{aligned}}}

With theta denoting the angle between {displaystyle {bf {p_{1}}}} and {displaystyle {bf {p_{2}}}}, we now have that:

{displaystyle {begin{aligned}cos(theta )&=langle {bf {p_{1}}},{bf {p_{2}}}rangle =langle {bf {p_{1}'}},{bf {p_{2}'}}rangle =cos(lambda ')cos(varphi _{1})cos(varphi _{2})+sin(varphi _{1})sin(varphi _{2})\&=sin(varphi _{2})sin(varphi _{1})+cos(varphi _{2})cos(varphi _{1})-cos(varphi _{2})cos(varphi _{1})+cos(lambda ')cos(varphi _{2})cos(varphi _{1})\&=cos(varphi _{2}-varphi _{1})+cos(varphi _{2})cos(varphi _{1})(-1+cos(lambda '))Rightarrow \operatorname {hav} left(theta right)&=operatorname {hav} left(varphi _{2}-varphi _{1}right)+cos(varphi _{2})cos(varphi _{1})operatorname {hav} left(lambda _{2}-lambda _{1}right)end{aligned}}}

See also[edit]

  • Sight reduction
  • Vincenty’s formulae

References[edit]

  1. ^ van Brummelen, Glen Robert (2013). Heavenly Mathematics: The Forgotten Art of Spherical Trigonometry. Princeton University Press. ISBN 9780691148922. 0691148929. Retrieved 2015-11-10.
  2. ^ de Mendoza y Ríos, Joseph (1795). Memoria sobre algunos métodos nuevos de calcular la longitud por las distancias lunares: y aplicacion de su teórica á la solucion de otros problemas de navegacion (in Spanish). Madrid, Spain: Imprenta Real.
  3. ^ Cajori, Florian (1952) [1929]. A History of Mathematical Notations. Vol. 2 (2 (3rd corrected printing of 1929 issue) ed.). Chicago: Open court publishing company. p. 172. ISBN 978-1-60206-714-1. 1602067147. Retrieved 2015-11-11. The haversine first appears in the tables of logarithmic versines of José de Mendoza y Rios (Madrid, 1801, also 1805, 1809), and later in a treatise on navigation of James Inman (1821). (NB. ISBN and link for reprint of second edition by Cosimo, Inc., New York, 2013.)
  4. ^ Inman, James (1835) [1821]. Navigation and Nautical Astronomy: For the Use of British Seamen (3 ed.). London, UK: W. Woodward, C. & J. Rivington. Retrieved 2015-11-09. (Fourth edition: [1].)
  5. ^ «haversine». Oxford English Dictionary (2nd ed.). Oxford University Press. 1989.
  6. ^ H. B. Goodwin, The haversine in nautical astronomy, Naval Institute Proceedings, vol. 36, no. 3 (1910), pp. 735–746: Evidently if a Table of Haversines is employed we shall be saved in the first instance the trouble of dividing the sum of the logarithms by two, and in the second place of multiplying the angle taken from the tables by the same number. This is the special advantage of the form of table first introduced by Professor Inman, of the Portsmouth Royal Navy College, nearly a century ago.
  7. ^ W. W. Sheppard and C. C. Soule, Practical navigation (World Technical Institute: Jersey City, 1922).
  8. ^ E. R. Hedrick, Logarithmic and Trigonometric Tables (Macmillan, New York, 1913).
  9. ^ Gade, Kenneth (2010). «A Non-singular Horizontal Position Representation». Journal of Navigation. 63 (3): 395–417. Bibcode:2010JNav…63..395G. doi:10.1017/S0373463309990415. ISSN 0373-4633.
  10. ^ Korn, Grandino Arthur; Korn, Theresa M. (2000) [1922]. «Appendix B: B9. Plane and Spherical Trigonometry: Formulas Expressed in Terms of the Haversine Function». Mathematical handbook for scientists and engineers: Definitions, theorems, and formulas for reference and review (3rd ed.). Mineola, New York: Dover Publications. pp. 892–893. ISBN 978-0-486-41147-7.

Further reading[edit]

  • U. S. Census Bureau Geographic Information Systems FAQ, (content has been moved to 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).
  • Deriving the haversine formula, Ask Dr. Math (Apr. 20–21, 1999).[dead link] Archived 20 January 2020 at the Wayback Machine
  • Romuald Ireneus ‘Scibor-Marchocki, 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).

External links[edit]

  • Implementations of the haversine formula in 91 languages at rosettacode.org and in 17 languages on codecodex.com Archived 2018-08-14 at the Wayback Machine
  • Other implementations in C++, C (MacOS), Pascal Archived 2019-01-16 at the Wayback Machine, Python, Ruby, JavaScript, PHP Archived 2018-08-12 at the Wayback Machine,Matlab Archived 2020-05-13 at the Wayback Machine, MySQL

Задача[править]

Есть координаты двух точек в пространстве. Нужна функция, которая возвращает «расстояние», которое по поверхности сферы более короткое, чем при отклонении от поверхности сферы.

Расстояние между двумя точками на сфере — известно как считать, но вопрос в том, как сделать так, чтобы:

  1. его преобразовать через функцию так, чтобы оно было меньше, чем по прямой
  2. а точнее ПОСТЕПЕННО увеличивалось бы, если отклоняется от траектории по поверхности сферы

Ответ[править]

Расстояние между точками (x1,y1,z1) и (x2,y2,z2) с нужными свойствами выглядит так:

 r1=sqrt(x1*x1+y1*y1+z1*z1);
 r2=sqrt(x2*x2+y2*y2+z2*z2);
 a=acos((x1*x2+y1*y2+z1*z2)/r1/r2);
 b=ln(r1/r2);
 return sqrt(a*a+b*b);

То есть, мы вычисляем центральный угол между точками, логарифм отношения их расстояний до центра и возвращаем корень из суммы их квадратов. Для точек на сфере «расстояние» будет равно центральному углу между ними, а если мы от сферы отойдём, то расстояние увеличится.

Расстояние между двумя точками на сфере[править]

Если даны сферические координаты двух точек, то расстояние между ними можно найти так:

{displaystyle L=Rcdot arccos(cos theta _{1}cdot cos theta _{2}cdot cos(phi _{1}-phi _{2})+sin theta _{1}cdot sin theta _{2}).}

См. также[править]

  • Сферическая система координат

Через
любые две точки на поверхности сферы,
если они не прямо противоположны друг
другу (то есть не являются антиподами),
можно провести уникальный большой круг.
Две точки, разделяют большой круг на
две дуги. Длина короткой дуги – кратчайшее
расстояние между двумя точками. Между
двумя точками-антиподами можно провести
бесконечное количество больших кругов,
но расстояние между ними будет одинаково
на любом круге и равно половине окружности
круга, или pi*R, где R – радиус сферы.

Рисунок
8. Вычисление расстояния по
gps
координатам

Форма
Земли может быть описана как сфера,
поэтому уравнения для вычисления
расстояний на большом круге важны для
вычисления кратчайшего расстояния
между точками на поверхности Земли и
часто используются в навигации.

Существует
три способа расчета сферического
расстояния большого круга.

1. Сферическая теорема косинусов

В
случае маленьких расстояний и небольшой
разрядности вычисления (количество
знаков после запятой), использование
формулы может приводить к значительным
ошибкам связанным с округлением.


широта и долгота двух точек в радианах


разница координат по долготе


угловая разница

Формула
15. Сферическая теорема косинусов.

Для
перевода углового расстояния в
метрическое, нужно угловую разницу
умножить на радиус Земли (6372795 метров),
единицы конечного расстояния будут
равны единицам, в которых выражен радиус
(в данном случае — метры).[7]

2. Формула гаверсинусов

Используется,
чтобы избежать проблем с небольшими
расстояниями.[7]

Формула 16. Формула гаверсинусов

3. Модификация для антиподов

Предыдущая
формула также подвержена проблеме
точек-антиподов, чтобы ее решить
используется следующая ее модификация.
[7]

Формула 17. Формула для антиподов

Эллипсоид
Красовского

Эллипсоид
Красовского — земной эллипсоид,
определенный из градусных измерений в
1940 г. под руководством Ф. Н. Красовского.
Размеры эллипсоида: большая полуось
(радиус экватора) 6 378 245 м. Эллипсоид
Красовского принят для применения в
геодезических и картографических
работах в России взамен ранее применявшегося
в этих работах земного эллипсоида
Бесселя, размеры которого оказались
ошибочными. Будем использовать значение
его радиуса для вычисления расстояния
между 2 объектами в зависимости от
значения угловой разницы.

Для
вычисления расстояния между двумя
точками в Москве будем использовать
формулу гаверсинусов и значение радиуса
экватора 6378245 м.[2]

  1. Технологический раздел

    1. Требования к вычислительной системе

Общепринятым
считается указывать две конфигурации
компьютера, которые используются в
качестве рабочей платформы для
программного продукта. Это минимальная,
в которой работа с программой будет
очень затруднена, и обеспечивающая лишь
запуск и минимальное функционирование
программы (используется разработчиками
для создания тестового контура), и
рекомендованная, которая позволит
получить наибольшую отдачу от программы.

Минимальные
требования

к
серверу:

  • микропроцессор
    пятого или шестого поколения
    (производителей AMD,
    Intel)

  • 16
    MB
    ОЗУ

  • 20
    Мб на диске

  • остальное
    используемое оборудование должно
    удовлетворять требованиям, накладываемым
    выбранной ОС семейства Microsoft
    Windows

Рекомендуемые
требования к серверу:

  • микропроцессор
    шестого поколения и выше (производителей
    AMD,
    Intel),
    например семейства процессоров
    Bloomfield
    (2008г.)
    использующий
    микроархитектуру Intel Nehalem

  • 4000
    MB
    ОЗУ

  • 50
    Мб на диске

  • остальное
    используемое оборудование должно
    удовлетворять требованиям, накладываемым
    выбранной ОС семейства Microsoft
    Windows

Требуемое
для работы сервера операционное
окружение:

  • Операционная
    система
    Windows 7, Windows Vista, Windows Server 2008 или
    Windows Server 2008 R2

  • установка
    роли веб-сервера (IIS) и требуемых служб

  • библиотеки:
    ASP.NET уже содержит полный набор элементов
    управления и библиотек классов

Требования
к машине клиента:

  • Компьютер
    с доступом в интернет и установленным
    браузером (данное приложение было
    протестировано в браузерах IE
    (версия 9.0.8112.16421) и Opera
    (версия 11.60)

  • Желательно
    наличие установленной программной
    платформы Microsoft SilverLight (версия 4.0.50917.0)

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]

  • #
  • #
  • #
  • #
  • #
  • #
  • #
  • #
  • #
  • #
  • #

Правила форума

В этом разделе нельзя создавать новые темы.

Если Вы хотите задать новый вопрос, то не дописывайте

его в существующую тему, а создайте новую в корневом разделе «Помогите решить/разобраться (М)».

Если Вы зададите новый вопрос в существующей теме, то в случае нарушения оформления или других правил форума Ваше сообщение и все ответы на него могут быть удалены без предупреждения.

Не ищите на этом форуме халяву

, правила запрещают участникам публиковать готовые решения стандартных учебных задач. Автор вопроса обязан привести свои попытки решения

и указать конкретные затруднения.

Обязательно просмотрите тему

Правила данного раздела, иначе Ваша тема может быть удалена

или перемещена в Карантин, а Вы так и не узнаете, почему.

 

Формула для вычесления расстояния между точками на сфере.

Сообщение18.11.2012, 20:44 


18/11/12
7

По заданию у меня есть две точки на планете Земля (координаты точек заданы в градусах, каждая точка соответственно имеет 2 координаты- широту и долготу). Используя данные точки (также можно использовать радиус Земли и т.п.,но в формуле должны быть использованы координаты точек) мне нужно посчитать: 1)расстояние между данными точками по сфере (т.е. длину дуги,самый короткий путь из точки А в точку Б, по английски я так понимаю это Great-circle distance )
2) представить,что из точки А в точку Б вырыли туннель,задача найти длину туннеля. (То есть расстояние от точки А до Б напрямую через планету Земля).
Планету представляем как шар,сферу ( т.е. исключаем то,что она по правде не круглая). Необходимы формулы,которые будут работать с любыми координатами.
Заранее огромное спасибо!

Профиль  

alcoholist 

 Re: Формула для вычесления расстояния между точками на сфере.

Сообщение18.11.2012, 20:55 

Заслуженный участник
Аватара пользователя


22/01/11
2641
СПб

сферические координаты помогут найти длину хорды

Профиль  

tasyastasy 

 Re: Формула для вычесления расстояния между точками на сфере.

Сообщение18.11.2012, 21:13 


18/11/12
7

С помощью какой именно формулы?Есть предположения? Я нашла только формулу $l=2R sin(alpha/2)$, но здесь используется угол между прямыми,а у меня его нет.

Профиль  

Pphantom 

Re: Формула для вычесления расстояния между точками на сфере.

Сообщение18.11.2012, 21:26 

Заслуженный участник


09/05/12
25191

Найдите теорему косинусов в сферической тригонометрии и запишите длину дуги как длину стороны треугольника с вершинами в двух нужных Вам точках и географическом полюсе. Длина хорды элементарно ищется из длины дуги, это уже простейшая планиметрическая задача.

Профиль  

tasyastasy 

Re: Формула для вычесления расстояния между точками на сфере.

Сообщение18.11.2012, 21:33 


18/11/12
7

Профиль  

_Ivana 

Re: Формула для вычесления расстояния между точками на сфере.

Сообщение18.11.2012, 21:42 


05/09/12
2587

Профиль  

Евгений Машеров 

Re: Формула для вычесления расстояния между точками на сфере.

Сообщение19.11.2012, 09:32 

Заслуженный участник
Аватара пользователя


11/03/08
8829
Москва

Альтернативный сферической геометрии вариант:
Переходим из полярных в декартовы координаты и находим расстояние между точками, заданными этими координатами (это будет длина хорды). Зная длину хорды — получим длину дуги большого круга.

Профиль  

tasyastasy 

 Re: Формула для вычесления расстояния между точками на сфере.

Сообщение19.11.2012, 10:50 


18/11/12
7

Я уже видела эту ссылку,перед тем,как задать вопрос я очень долго искала все связанное с этой темой. По вашей ссылке внизу есть формула,но значения алфа и бетта там берутся в градусах или в радианах?Я посчитала и с градусами и с радианами и такой ответ как там мне не выходит.

— 19.11.2012, 08:52 —

Альтернативный сферической геометрии вариант:
Переходим из полярных в декартовы координаты и находим расстояние между точками, заданными этими координатами (это будет длина хорды). Зная длину хорды — получим длину дуги большого круга.

Как перевести из полярных в декартовы и как учитывать разные полушария (где именно будет со знаком минус ,где со знаком плюс)?

Профиль  

alcoholist 

 Re: Формула для вычесления расстояния между точками на сфере.

Сообщение19.11.2012, 10:59 

Заслуженный участник
Аватара пользователя


22/01/11
2641
СПб

Как перевести из полярных в декартовы

не полярные, а сферические

— Пн ноя 19, 2012 11:00:13 —

запишите длину дуги как длину стороны треугольника

а где там треугольник?

Профиль  

tasyastasy 

 Re: Формула для вычесления расстояния между точками на сфере.

Сообщение19.11.2012, 11:01 


18/11/12
7

Профиль  

Pphantom 

Re: Формула для вычесления расстояния между точками на сфере.

Сообщение19.11.2012, 11:15 

Заслуженный участник


09/05/12
25191

Но по этой формуле у меня выходят неправильные значения. Долготу и широту подставляла в градусах,может в этом ошибка?

Формула правильная. Градусы подставлять можно, это не может быть источником проблемы. А вот в чем Вы получали арккосинус? Его значение должно быть в радианах, это важно.

Профиль  

alcoholist 

Re: Формула для вычесления расстояния между точками на сфере.

Сообщение19.11.2012, 11:30 

Заслуженный участник
Аватара пользователя


22/01/11
2641
СПб

нашла формулу для вычисления расстояния между двумя точками на сфере

Вам нужно «найти формулу», или решить задачу?-)

Профиль  

tasyastasy 

 Re: Формула для вычесления расстояния между точками на сфере.

Сообщение19.11.2012, 12:00 


18/11/12
7

нашла формулу для вычисления расстояния между двумя точками на сфере

Вам нужно «найти формулу», или решить задачу?-)

Мне вообще это все нужно для написания программы в jave..Поэтому я и написала,что мне нужна формула,которая будет работать с любыми координатами.Если бы у меня была задача с опр. координатами я бы её решила уже,здесь же мне нужно побольше вещей учитывать..

— 19.11.2012, 10:09 —

Но по этой формуле у меня выходят неправильные значения. Долготу и широту подставляла в градусах,может в этом ошибка?

Формула правильная. Градусы подставлять можно, это не может быть источником проблемы. А вот в чем Вы получали арккосинус? Его значение должно быть в радианах, это важно.

Спасибо,теперь все получилось. Я считала значение арккосинуса из градусов. Наверное это очень глупый вопрос,но почему значение арккосинуса должно быть в радианах?

Профиль  

Евгений Машеров 

Re: Формула для вычесления расстояния между точками на сфере.

Сообщение19.11.2012, 12:22 

Заслуженный участник
Аватара пользователя


11/03/08
8829
Москва

С поправкой, что «сферические», согласен.

А значение арккосинуса может быть и в градусах, только тогда, чтобы получить длину дуги, недостаточно будет просто умножить на радиус, нужно будет вычислить длину градуса, и её умножить на угол.

Профиль  

Toucan 

Posted automatically

Сообщение19.11.2012, 12:56 

Админ форума
Аватара пользователя


19/03/10
8952


 i 
Тема перемещена из форума «Математика (общие вопросы)» в форум «Помогите решить / разобраться (М)»

Профиль  

Модераторы: Модераторы Математики, Супермодераторы

Понравилась статья? Поделить с друзьями:

Не пропустите также:

  • Как найти объемную долю полученного раствора
  • Гвиндолин темное солнце как найти
  • Как найти соседку по имени
  • Фильм про самолеты как найти
  • Как найти ip адрес по адресу сайта

  • 0 0 голоса
    Рейтинг статьи
    Подписаться
    Уведомить о
    guest

    0 комментариев
    Старые
    Новые Популярные
    Межтекстовые Отзывы
    Посмотреть все комментарии