Jak narysować linię prostopadłą do niej, mając linię na powierzchni ziemi?

9

Jak narysować linię prostopadłą do niej, mając linię na powierzchni ziemi?

Przepraszamy, jeśli jest to bardzo proste pytanie. Myślałem, że będzie to proste zadanie, ale okazuje się sprzeczne z intuicją.

Zaczynam od niebieskiej linii na poniższym rysunku (patrz link - nie mogę jeszcze przesłać figurek). Znalazłem prostopadłą linię, obliczając gradient niebieskiej linii (m), a następnie wykreślając inną linię (zieloną) z gradientem -1 / m. Kiedy rysuję linie w Matlabie (używając „wykresu” i „osi równej”), wyglądają one prostopadle, zgodnie z oczekiwaniami.

http://imgur.com/7qMkx

Jednak kiedy eksportuję te linie do Google Earth (używając KML Toolbox), nie wyglądają już one prostopadle (patrz link poniżej; krótsza linia to niebieska linia z poprzedniego rysunku).

http://imgur.com/ncJQ7

Rozumiem, że na zakrzywionych powierzchniach dzieją się dziwne rzeczy, ale pomyślałem, że linie powinny przynajmniej wyglądać lokalnie prostopadle. Podejrzewam, że ma to coś wspólnego z rzutowaniem w Google Earth - w szczególności fakt, że komórki siatki wydają się mieć mniej więcej podobne długości boków, ale krawędź wzdłużna ma długość = 1 stopień, podczas gdy krawędź wzdłużna ma długość = 0,5 stopień.

Podsumowując:

  • czy moja metoda znajdowania linii prostopadłej jest ważna na zakrzywionej powierzchni? (tj. kreślenie linii z gradientem -1 / m)
  • czy na obrazie Google Earth linie prostopadłe wyglądają zgodnie z oczekiwaniami, czy dzieje się coś dziwnego?

AKTUALIZACJA:

Aby zapewnić więcej kontekstu: patrzę na dane radarowe pobrane z samolotu. Wielobarwny obszar to „pokos”, w którym odnotowano obserwacje. Niebieska linia, od której zacząłem w powyższym wyjaśnieniu, jest równoległa do pokosu: jest to linia lotu samolotu (samolot poruszał się w przybliżeniu w kierunku południowo-zachodnim). Radar patrzy w kierunku prostopadłym do linii lotu, po lewej stronie. Próbuję narysować linię prostopadłą do linii lotu; powinien to być kierunek, w którym patrzy radar, i powinien starannie pokroić pokos. Jak widać, tak nie jest.

wprowadź opis zdjęcia tutaj

Paul Keating
źródło
2
W rzeczywistości Google prawidłowo przedstawia kąt, podczas gdy twoja fabuła Matlaba nie ...
whuber
Dzięki za odpowiedź, Whuber. Czy to oznacza, że ​​linia, którą obliczyłem, nie jest w rzeczywistości prostopadła do oryginału? Czy to oznacza, że ​​sposób, w jaki widzę linie w Matlabie, jest w jakiś sposób niewłaściwy? Użyłem polecenia „równości osi” w Matlabie, aby przekonać się, że linie są prostopadłe, ale spodziewam się, że nie przedstawiłoby to poprawnie krzywizny ziemi.
Paul Keating
2
Twoja pierwsza interpretacja jest poprawna, Paul. Używanie (lon, lat) tak, jakby były współrzędnymi kartezjańskimi, zniekształca kierunki tak poważnie, że większość kątów jest wyraźnie zniekształcona. Dlatego użycie wzoru kartezjańskiego -1 / m nie zbliży cię nawet do kąta prostego, z wyjątkiem kilku szczęśliwych kierunków (lub na równiku). Aby zapewnić alternatywną metodę, warto wiedzieć, jakiego rodzaju „linii” chcesz (na przykład linia geodezyjna lub loksodromowa), jaki jest cel jej wykreślenia i jak długo powinna ona trwać. (Krótkie długości pozwalają na stosowanie prostych przybliżeń.)
whuber
2
BTW, możesz się wiele dowiedzieć o tych problemach, czytając niektóre wątki na naszej stronie dotyczące projekcji konformalnych .
whuber
Dziękuję bardzo, kurwa. Bardzo interesujące. Podałem więcej kontekstu w opisie problemu powyżej. Potrzebna mi długość jest stosunkowo krótka (pokazana powyżej szerokość pokosu, wynosząca kilka dziesiątych stopnia), więc wszelkie sugestie dotyczące prawidłowych przybliżeń byłyby bardzo mile widziane. Dziękuję również za link - sprawdzę to.
Paul Keating

Odpowiedzi:

10

Elegancka zasada zapewnia prostą odpowiedź:

Wszystkie punkty na gładko zakrzywionej powierzchni są płaskie w wystarczająco dużej skali.

Oznacza to, że po afinicznej zmianie współrzędnych (zwykle polegającej jedynie na przeskalowaniu jednego z nich), możemy użyć wzorów geometrii euklidesowej, takich jak twierdzenie Pitagorasa do obliczania odległości i wzoru ujemno-odwrotnego-nachylenia do znajdowania prostopadłych.

Przy współrzędnych szerokości i długości geograficznej na kuli (z dala od biegunów, gdzie długość staje się pojedyncza), wszystko, co musimy zrobić, to przeskalować kierunek wschód-zachód, aby odzwierciedlić kurczącą się długość stopnia, gdy zbliżamy się do biegunów. W przypadku kulistego modelu ziemi skurcz ten jest podawany przez cosinus szerokości geograficznej. To tylko zmiana proporcji fabuły, nic więcej.

Działa to w regionach, które rozciągają się nie więcej niż kilka stopni szerokości geograficznej północ-południe i nie zbliżają się do żadnego bieguna.

Dlatego wszystko, co musisz zrobić, to:

  1. Pomnóż wszystkie długości geograficzne przez cosinus typowej szerokości geograficznej.

  2. Oblicz linię prostopadłą.

  3. Cofnij korektę współrzędnych.

Załóżmy na przykład, że ślad samolotu wziął go z (lon, lat) = (-78, 40) do (-79, 41). Możemy przyjąć typową szerokość geograficzną, aby leżeć między 40 a 41, na przykład 40,5.

Krok 1 Skorygowane współrzędne to (-78 * cos (40,5), 40) = (-59.31167, 40) i (-79 * cos (40,5), 41) = (-60,07207, 41).

Krok 2 Pytanie proponuje zrobienie tego przy użyciu metody ujemnego-odwrotnego-nachylenia. To byłoby poprawne, ale w niektórych przypadkach zawiedzie (gdy nachylenie jest nieskończone). Używanie arytmetyki wektorowej jest bardziej ogólne i wydajniejsze. Oto jak przebiegają obliczenia.

Wektor kierunku toru lotu to przemieszczenie od jego początku do końca,

v =  (-60.07207, 41) - (-59.31167, 40)
  =  (-0.7604, 1.0).

Obracanie dowolnego wektora (x, y) pod kątem prostym w kierunku zgodnym z ruchem wskazówek zegara daje (y, -x), skąd prostopadły kierunek w prawo jest

w = (1.0, 0.7604).

Zgodnie z twierdzeniem Pitagorasa długość tego wektora jest pierwiastkiem kwadratowym sumy kwadratów jego współczynników,

|w| = sqrt(1^2 + 0.7604^2) = 1.256268

Poruszajmy się, powiedzmy, o 0,2 stopnia wzdłuż tego wektora od punktu początkowego lotu samolotu. Początek to (-59.31167, 40), a przemieszczenie wynosi 0,2 / | w | razy w, kończąc na

(-59.31167, 40) + 0.2 / 1.256268 * (1.0, 0.7604) = (-59.15247  40.12106).

Krok 3 Aby cofnąć dopasowanie, podziel pierwsze współrzędne wszystkich wynikowych punktów przez ten sam cosinus użyty w kroku 1:

(-59.15247/cos(40.5), 40.12106) = (-77.79064, 40.12106)

Jeśli narysujesz te punkty przy współczynniku kształtu 1: 1, kąt będzie wyglądał raczej na rozwarty niż pod kątem prostym. Ale jeśli zmienisz proporcje obrazu na 1: cos (40,5) (około 4: 3), kąt będzie wyglądał poprawnie na 90 stopni. Podczas kreślenia punktów za pomocą dowolnej projekcji konformacyjnej - w tym Mercatora Google - kąt będzie również poprawny.

Whuber
źródło
2
To jest fantastyczne, kurwa. Dziękuję bardzo. To bardzo jasne wytłumaczenie, gdzie popełniam błąd i jak mogę rozwiązać problem. Skończyło się na użyciu funkcji „azymutu” i „obliczania” Matlaba, aby uzyskać linię prostopadłą, ale dobrze jest zobaczyć bardziej szczegółowe wyjaśnienie, w jaki sposób to zrobić. Wielkie dzięki.
Paul Keating