Próbuję dowiedzieć się, jak matematycznie wyprowadzić wspólne punkty dwóch przecinających się kół na powierzchni Ziemi, biorąc pod uwagę środek Lat / Lon i promień dla każdego punktu.
Na przykład biorąc pod uwagę:
- Lat / Lon (37,673442, -90,234036) Promień 107,5 NM
- Lat / Lon (36.109997, -90.953669) Promień 145 NM
Powinienem znaleźć dwa punkty przecięcia z jednym z nich (36,948, -088.158).
Rozwiązanie problemu na płaskiej płaszczyźnie byłoby banalnie proste, ale nie mam doświadczenia w rozwiązywaniu równań na niedoskonałej kuli, takiej jak powierzchnia ziemi.
Odpowiedzi:
Gdy tylko to rozpoznasz, nie będzie to trudniejsze na kuli niż w samolocie
Chodzi o wzajemne przecięcia trzech sfer: kuli wyśrodkowanej poniżej położenia x1 (na powierzchni ziemi) o danym promieniu, kuli wyśrodkowanej poniżej położenia x2 (na powierzchni ziemi) o danym promieniu i samej ziemi , która jest kulą wyśrodkowaną na O = (0,0,0) o danym promieniu.
Przecięcie każdej z dwóch pierwszych sfer z powierzchnią ziemi to okrąg, który definiuje dwie płaszczyzny. Wzajemne przecięcia wszystkich trzech sfer leżą zatem na przecięciu tych dwóch płaszczyzn: linii .
W rezultacie problem sprowadza się do przecięcia linii ze sferą, co jest łatwe.
Oto szczegóły. Wejściami są punkty P1 = (lat1, lon1) i P2 = (lat2, lon2) na powierzchni ziemi, uważane za kulę, i dwa odpowiadające im promienie r1 i r2.
Konwertuj (lat, lon) na (x, y, z) współrzędne geocentryczne. Jak zwykle, ponieważ możemy wybrać jednostki miary, w których Ziemia ma promień jednostki,
W przykładzie P1 = (-90,234036 stopnia, 37,673442 stopień) ma współrzędne geocentryczne x1 = (-0,00323306, -0,7915, 0,61116), a P2 = (-90.953669 stopień, 36,109997 stopnia) ma współrzędne geocentryczne x2 = (-0,0134464, -0,8077 , 0,589337).
Przelicz promienie r1 i r2 (mierzone wzdłuż kuli) na kąty wzdłuż kuli. Z definicji jedna mila morska (NM) to 1/60 stopnia łuku (co oznacza pi / 180 * 1/60 = 0,0002908888 radianów). Dlatego jako kąty
Geodezyjnej okrąg o promieniu r1 około X1 przecięcie powierzchni Ziemi z euklidesowej kuli o promieniu sin (R1) wyśrodkowany cos (R1) * X1.
Płaszczyzna wyznaczona przez przecięcie kuli o promieniu sin (r1) wokół cos (r1) * x1, a powierzchnia ziemi jest prostopadła do x1 i przechodzi przez punkt cos (r1) x1, skąd jej równanie wynosi x.x1 = cos (r1) („.” oznacza zwykły iloczyn skalarny ); podobnie w przypadku drugiej płaszczyzny. Na przecięciu tych dwóch płaszczyzn będzie unikalny punkt x0, który jest liniową kombinacją x1 i x2. Zapisując x0 = a x1 + b * x2 są dwa równania płaskie
Biorąc pod uwagę fakt, że x2.x1 = x1.x2, które napiszę jako q, rozwiązanie (jeśli istnieje) jest podane przez
W bieżącym przykładzie obliczam a = 0,973503 ib = 0,0260194.
Najwyraźniej potrzebujemy q ^ 2! = 1. Oznacza to, że x1 i x2 nie mogą być ani tym samym punktem, ani antypodalnymi punktami.
Teraz wszystkie inne punkty na linii przecięcia dwóch płaszczyzn różnią się od x0 pewną wielokrotnością wektora n, który jest wzajemnie prostopadły do obu płaszczyzn. Produkt krzyżowy
wykonuje zadanie pod warunkiem, że n jest niezerowe: ponownie oznacza to, że x1 i x2 nie są ani zbieżne ani diametralnie przeciwne. (Musimy zadbać o obliczenie iloczynu krzyżowego z wysoką precyzją, ponieważ obejmuje on odejmowanie z dużą ilością anulowania, gdy x1 i x2 są blisko siebie.) W przykładzie n = (0,0272194, -0,00631254, -0,00803124) .
Dlatego szukamy do dwóch punktów formy x0 + t * n, które leżą na powierzchni ziemi: to znaczy, że ich długość wynosi 1. Odpowiednio ich kwadratowa długość wynosi 1:
Termin z x0.n znika, ponieważ x0 (będący liniową kombinacją x1 i x2) jest prostopadły do n. Oba rozwiązania łatwo są
i jego negatywne. Ponownie wymagana jest wysoka precyzja, ponieważ gdy x1 i x2 są blisko, x0.x0 jest bardzo bliskie 1, co prowadzi do pewnej utraty precyzji zmiennoprzecinkowej. W przykładzie t = 1,07509 lub t = -1,07509. Dwa punkty przecięcia są zatem równe
Na koniec możemy przekonwertować te rozwiązania z powrotem na (lat, lon), przekształcając dane geocentryczne (x, y, z) na współrzędne geograficzne:
Dla długości użyć uogólnionego tangens powrocie wartości w zakresie od -180 do 180 stopni (w zastosowaniach komputerowych, funkcja wykonuje zarówno X i Y, argumentów, a nie tylko w stosunku y / x, jest czasami nazywana „ATAN2”).
Otrzymuję dwa rozwiązania (-88,151426, 36,989311) i (-92,390485, 38,238380), pokazane na rysunku jako żółte kropki.
Osie wyświetlają współrzędne geocentryczne (x, y, z). Szara łata to część powierzchni ziemi od -95 do -87 stopni długości geograficznej, od 33 do 40 stopni szerokości geograficznej (zaznaczona siatką o jeden stopień). Powierzchnia ziemi została częściowo przezroczysta, aby pokazać wszystkie trzy sfery. Poprawność obliczonych rozwiązań jest widoczna dzięki temu, jak żółte punkty znajdują się na przecięciach sfer.
źródło
Elipsoidalny przypadek:
Problem ten jest uogólnieniem problemu znajdowania granic morskich określonych jako „linie środkowe” i istnieje obszerna literatura na ten temat. Moim rozwiązaniem tego problemu jest wykorzystanie równoodległej projekcji azymutalnej:
Algorytm ten zbiega się kwadratowo i daje dokładne rozwiązanie dla elipsoidy. (Dokładność jest wymagana w przypadku granic morskich, ponieważ określa prawa do połowów, ropy naftowej i minerałów).
Wzory podano w rozdziale 14 Geodezji na elipsoidzie obrotu . Elipsoidalna równoodległa projekcja azymutalna jest dostarczana przez GeographicLib . Wersja MATLAB jest dostępna w rzutach geodezyjnych dla elipsoidy .
źródło
Oto trochę kodu R, aby to zrobić:
źródło
Po odpowiedzi na @ whuber , oto kod Java, który jest użyteczny z dwóch powodów:
Nie jest zoptymalizowany ani ukończony (pominąłem oczywiste klasy takie jak
Point
), ale powinien załatwić sprawę.Co ważne, zwróć uwagę na użycie
atan2
- jest to odwrotność tego, czego można oczekiwać od odpowiedzi @ whubera (nie wiem dlaczego, ale działa):źródło
Działający kod „R” dla odpowiedzi @wuhber.
źródło
Jeśli jednym z kół jest Nortstar, to najłatwiejszym sposobem jest użycie kuli jednostkowej.
Możesz zmierzyć swoją szerokość geograficzną za pomocą Nortstar. Następnie masz względną pozycję na tej sferze. v1 (0, sin (la), cos (la)) Znasz pozycję (kąt) innej gwiazdy (star2), z almanach. v2 (sin (lo2) * cos (la2), sin (la2), cos (lo2) * cos (la2)) Jego wektory. Z równania sfery.
lo2 jest względną długością geograficzną. Nie wiadomo .
Kąt między tobą a gwiazdą 2 również możesz zmierzyć, (m) I wiesz, iloczyn wewnętrzny wektora dwóch jednostek to cos (kąt) pomiędzy. cos (m) = kropka (v1, v2) możesz teraz obliczyć względną długość geograficzną (lo2). lo2 = acos ((cos (m) -sin (la) * sin (la2)) / (cos (la) * cos (la2)))
W końcu dodajesz prawdziwą długość geograficzną star2 do lo2. (lub okręt podwodny, zależą od jego zachodniej strony od ciebie lub wschodniej.) lo2 teraz jest twoją długością geograficzną.
Przepraszam za mój angielski, nigdy nie uczę się tego języka.
2 rzeczy: Northstar oznacza gwiazdę polarną.
Inne. Ponieważ kąt mierzony względem poziomu jest konieczny, zawsze potrzebna jest korekcja 90-kątowa. Obowiązuje również kąt m.
ps: średni kąt rzeczywisty: pozycja gwiazdy - korekta czasowa.
źródło