В.П. Болотов,  С.В.Коркишко, Т.Т. Саранжав

Прямая и обратная геодезические задачи
в сферической локсодромии на примерах

Прямая задача в сферической локсодромии

Нахождение координат точки, отстоящей от данной точки с координатами (B1, L1) на заданном расстоянии S в заданном направлении A

(31)

-         где R – радиус сферы.

Для a = 0 и a = Pi используются формулы

(32)

В системе Вектор

В случае с запада на восток или обратно

 

 

            

 

Движение из точка р11 в р12 по логарифмической спирали, 
локсодромии  и ортодромии

Длина по локсодромии p11-p12  по 11 отрезкам линии p11-p12  равна

Длина полилинии = 10178.3. Построенная псевдо-локсодромия (назовем ее так) меньше где-то на 200 метров. Результат довольно приемлемый, если учесть, что строили локсодромию (листинг 2) без гиперболических функций.    

 

Обратная геодезические задачи в сферической локсодромии

Приведенные формулы позволяют решить прямую геодезическую задачу – нахождение координат точки, отстоящей от данной точки с координатами (B1, L1) на заданном расстоянии S в заданном направлении A

(31)

-         где R – радиус сферы.

Для a = p/2 и a = 3p/2 используются формулы

(32)

Обратная геодезическая задача, то есть нахождение для двух точек с известными координатами расстояния и дирекционного угла (пеленга из первой точки во вторую), в сферической локсодромии решается на основании формул (31), (32):

(33)

 

 

 

 

 

 

Примеры

 

 

Расчет длины в км

Расчет длины в милях

 

Начальная и конечная точки взяты из примера. Есть отличия  

У автора рисунка при плавании по локсодромии следуя из т. А в т. В постоянным курсом КЛОК = 68°08′(~ 68,1°), пройденное расстояние SЛОК составит 3576,3 мили.

 

1 английская миля = 1.609344 километра (этой милей в Америке меряют расстояние) 
1 морская миля = 1,852 километра 
1 географическая миля = 7,42 километра 
1 старорусская миля = 7,4676 километра 
1 древнегреческая миля = 1,38825 километра 

Скорость в мерике меряют в милях в час. 
1 миля в час = 1,609344 километров в час 

 

Пример 2.Определить истинный локсодромический путевой угол a при полете из г. Реймса в г. Потсдам. Построить путь разными вариантами

Реймс (фр. Reims [ʁɛ̃s]) — город на северо-востоке Франции, в 147 км восточнее Парижа.

Реймс — самый крупный город региона Шампань — Арденны. Расположен на равнине, на правом берегу реки Вель (приток реки Эн). На юге и востоке к городу примыкают Реймсские горы, знаменитые своими виноградниками для производства шампанского.

Координаты      49° 15′ 57″ N, 4° 1′ 46″ E           Десятичные      49.265833, 4.029444

 

 

Потсда́м (нем. Potsdampɔtsdam], н.-луж. Podstupim) — город на востоке Германии с населением около 150 000 человек. Столица федеральной земли Бранденбург. Расположен на реке Хафель и на берегах нескольких соединённых между собой озёр, в 20 км к юго-западу от Берлина[1].

 

52° 24′ 0″ N, 13° 4′ 0″ E            Десятичные   52.4, 13.066667

 

 

 

Наши вычисления (723 км) и в примере  (722) почти одинаковые. По ортодромии путь короче на 7- 8 км.  По псевдо-локсодромии  почти равен пути ортодромии.  

При увеличении

  

Пример 3. Рассчитать угол локсодромии из Кейптауна в Нью-Йорк

Кейптаун

Координаты

33° 55′ 0″ S, 18° 29′ 0″ E

Десятичные

-33.916667, 18.483333

Нью-Йорк

Координаты

 

 

40° 43′ 0″ N, 74° 0′ 0″ W

Десятичные

40.716667, -74

    

 

У нас угол пути по локсодромии – 51 градус – на два градуса отличается от того что проложено по прямой на карте.

Расстояние по справочникам: ”Расстояние между городами Нью-Йорк и Кейптаун: 12564 километров

 

Более всего близок расчет по псевдо-локсодромии. И вообще  разница во всех случаях небольшая  меньше километра.  Для судна  это ничего не значит.

 

Расчет координат промежуточных точек ортодромии и ортодромии

Схема плавания судна по хордам ортодромии

Схема плавания судна по хордам ортодромии

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

 

 

Примечание. Построение локсодромии в 4-мерном пространстве можно по двум сферам: земной, и мира, заданных в координатных пространствах xyz и xyt, подобно тому как по двум координатным проекция  в 3-мерном строится линия.

Пе́ленг в навигации — горизонтальный угол между северной частью меридиана наблюдателя и направлением из точки наблюдения на объект; измеряется по часовой стрелке от нуля (направление на норд, N) до полной дуги окружности (360°, или 32 румба).

В отличие от азимута, допускающего вариации отсчета, пеленг всегда измеряется от направления на норд, по часовой стрелке и на полную дугу окружности. Таким образом пеленг соответствует круговому азимуту.

 

Румб — в морской терминологии 1/32 полной окружности, и соответственно одно из направлений относительно севера. В конце 1980-х обозначение востока O (нем. Ost, нидерл. oost) было заменено на E (англ. East).

 

 

Листинг

 

s=Log (10)

'VbsMsg "s =  " & s

' Кривая на сфере а(t) = (широта, долгота)

Rr=6.378

' Пример Откуда куда? От Кубы к берегам Испании

Set p1 = p(10, 35,0)

Set p2 = p(42, 133,0)

 

B1 = p1.x 

B2 = p2.x

L1 = p1.y

L2 = p2.y

n11 = LastNmb()

 

' Set p0 = p(-Rr,0,0)

Set p0 = p(0,0,0)

 

' p11-p12 - декартовые координаты

 Set p11 = PointSfera(p1.x, p1.y, Rr, 0)

            Ngpoint.ss p11

            Width 322

            SetColor 250,0,0

 Set p12 = PointSfera(p2.x, p2.y, Rr, 0)

            Ngpoint.ss p12

            Width 322

            SetColor 0,0,250

 

text.ss p11,"p11"

text.ss p12,"p12"

 

Pi = 3.14

A = 45  ' угол 

Set Pn = p11

 

tip=0   ' 0 - параллели, 1 - общий случай

 

For ss = 0  To 10 Step 0.1

' Для a = p/2 и a = 3p/2 используются формулы

 

if tip=0 Then

      B2 = B1*Pi/180   ' по параллели

      L2 = L1*Pi/180 + ss/(Rr*cos(B1*Pi/180))

end if

 

if tip=1 Then

      B2 = B1*Pi/180 + ss*cos(A*Pi/180)/Rr

      L2 = L1*Pi/180 + tan(A*Pi/180)*(log (tan(Pi/4 + (B2*Pi/180)/2)) - log(tan(Pi/4 + (B1*Pi/180)/2)))

end if

 

            Set Ai = PointSfera(B2*180/pi, L2*180/pi, Rr, 0)

            Ngpoint.ss Ai

            Width 122

            SetColor 250,0,0

            Otrezok.ss Pn, Ai

            Set Pn = Ai

 Next

 

n12 = LastNmb()

MoveToGroup n11+1, (n12+1), "Кривая"

 

 

' Кривая на сфере а(t) = (широтаолгота)

Rr=6.30

dl=p1.y

Set p0 = p11

n13 = LastNmb()

For hr=p1.x  To 90 Step 1

            Set A = PointSfera(hr, dl, Rr, 0)

            Ngpoint.ss A

            Width 122

            SetColor 250,0,0

            Otrezok.ss p0,A

            Width 66

            SetColor 0,0,250

            set p0=A

            dl=dl+10

      Next

n14 = LastNmb()

MoveToGroup n13+1, (n14+1), "Кривая"

 

' Кривая на сфере а(t) = (широтаолгота)

Rr=6.30

dl=p1.y

Set p0 = p11

n15 = LastNmb()

For hr=p1.x  To p2.x Step (p2.x-p1.x)/11

            Set A = PointSfera(hr, dl, Rr, 0)

            Ngpoint.ss A

            Width 122

            SetColor 250,0,0

            Otrezok.ss p0,A

            Width 66

            SetColor 0,0,250

            set p0=A

            dl=dl+(p2.y-p1.y)/11

      Next

n16 = LastNmb()

MoveToGroup n15+1, (n16+1), "Loksa_may"

n12 = LastNmb()

MoveToGroup n11+1, (n12+1), "Кривая"

 

Set N = NormPlosk (p(0,0,0),p11, p12)

Krug.ss p(0,0,0), Rr, N

Arc.Sphere p(0, 0, 0), Rr, P11, p12

Width=120

SetColor 250, 0, 0

Vector.Polyline.FromCurrObj 99

L = Vector.Polyline.Length

' MsgBox "Длина дуги = " & L*1000

' VBSMsg  "Длина большой дуги = " & L*1000

' Длина локсодромии

Set A = Loks(P1, P2)

VBSMsg  "Угол движения по локсодромии = " & 90-A.x _

& vbCrLf & "Длина пути по локсодромии =  " & A.y _

& vbCrLf & "Длина пути по ортодромии =  " & L*1000

 

' перевести в радианы умножьте градусы на pi/180; радианы в градусы, умножьте радианы на 180/pi.

 

Листинг 2

' Кривая на сфере а(t) = (широта, долгота)

Rr=6.378

Set p1 = p(10, 35,0)

Set p2 = p(42, 133,0)

 

B1 = p1.x 

B2 = p2.x

L1 = p1.y

L2 = p2.y

n11 = LastNmb()

 

' p11-p12 - декартовые координаты

 Set p11 = PointSfera(p1.x, p1.y, Rr, 0)

            Ngpoint.ss p11

            Width 322

            SetColor 250,0,0

 Set p12 = PointSfera(p2.x, p2.y, Rr, 0)

            Ngpoint.ss p12

            Width 322

            SetColor 0,0,250

 

text.ss p11,"p11"

text.ss p12,"p12"

Pi = 3.14

A = 45  ' угол 

Set Pn = p11

 

' Кривая на сфере а(t) = (широтаолгота)

Rr=6.30

dl=p1.y

Set p0 = p11

n15 = LastNmb()

For hr=p1.x  To p2.x Step (p2.x-p1.x)/11

            Set A = PointSfera(hr, dl, Rr, 0)

            Ngpoint.ss A

            Width 122

            SetColor 250,0,0

            Otrezok.ss p0,A

            Width 66

            SetColor 0,0,250

            set p0=A

            dl=dl+(p2.y-p1.y)/11

      Next

n16 = LastNmb()

MoveToGroup n15+1, (n16+1), "Loksa_may"

n12 = LastNmb()

MoveToGroup n11+1, (n12+1), "Кривая"

 

Set N = NormPlosk (p(0,0,0),p11, p12)

Krug.ss p(0,0,0), Rr, N

Arc.Sphere p(0, 0, 0), Rr, P11, p12

Width=120

SetColor 250, 0, 0

Vector.Polyline.FromCurrObj 99

L = Vector.Polyline.Length

' MsgBox "Длина дуги = " & L*1000

' VBSMsg  "Длина большой дуги = " & L*1000

' Длина локсодромии

Set A = Loks(P1, P2)

VBSMsg  "Угол пеленга по локсодромии = " & 90-A.x _

& vbCrLf & "Длина пути по локсодромии =  " & A.y _

& vbCrLf & "Длина пути по ортодромии =  " & L*1000

' Длина псевдо-локсодромии  = 10178.3.