Jak przekonwertować z globalnej przestrzeni współrzędnych na lokalną?


13

Biorąc pod uwagę nazwany obiekt EntityA, chcę zdefiniować lokalną przestrzeń współrzędnych, w której pozycja EntityAjest punktem początkowym, jego wektorem kierunku jest oś X, a normalną wektorem kierunku jest oś Y:

obrazowy opis tego samego

Biorąc pod uwagę ich globalne współrzędne, jak znaleźć pozycję innego bytu w EntityAlokalnej przestrzeni?

Przykład: EntityAglobalna pozycja to (50,50), a pozycja EntityBto (80,90). Jaka jest zatem pozycja EntityBw EntityAlokalnej przestrzeni?

EDYCJA: Proszę, nie przejmuj się matematyką.

Odpowiedzi:


21

Okej, więc Zakładając, że wiesz, czym jest macierz transformacji świata dla tego obiektu A, wystarczy zbudować odwrotność tej macierzy i będziesz mieć to, czego potrzebujesz.

Załóżmy, że obrót, skalowanie i tłumaczenia matryce obiektu używanego aby ją do globalnej przestrzeni są R , S i T odpowiednio. Pomnożysz je razem

S * R * T = W

Teraz weź W i znajdź w jakiś sposób jego odwrotność W ^ -1 . Odwrotnością macierzy jest macierz, która robi coś wręcz przeciwnego. Iloczyn macierzy z jej odwrotnością jest zawsze macierzą tożsamości.

W * W ^ -1 = I

zatem W ^ -1 = I / W ;

Teraz zastosuj tę odwrotną macierz jako transformację świata do sceny, a każdy obiekt będzie w pożądanych współrzędnych.

Aby uzyskać mnożenie macierzy, patrz Ta strona. Zobacz Matryca Tożsamości .

Oto kolejna strona, która daje matryce trzeba by zrobić W .

W powyższym pytaniu powinieneś wziąć translację w osi x jako 50, translację w osi y jako 50, bez skalowania w żadnej z osi i rotację, której nie określiłeś.


Dzięki za odpowiedź, ale tak naprawdę nie rozumiem zbyt wiele. Niezbyt dobrze z matematyki. Z macierzą? Co rozumiesz przez „macierze rotacji, skalowania i tłumaczenia”?
Aviv Cohn

Matrix jest bardzo zwarty sposób reprezentujący zbiór wzajemnie powiązanych numerów lub obiektów. W grafice komputerowej są one szeroko stosowane do wykonywania obliczeń. sprawdź ostatni link w odpowiedzi, aby dowiedzieć się, co mam na myśli przez tłumaczenie Rotation i Scaling Matrix. tak, będziesz musiał to wszystko przeczytać. W przeciwnym razie możesz użyć metody ashes999, aby rozwiązać problem, ale to nie zadziała; t uwzględnij rotację i skalowanie EntityA, jeśli istnieje.
Iskra światła

9

W przeszłości robiłem to z trygonometrią, a nie z matrycami (jestem noobem matrycowym). Odpowiedź Ashes999 jest w połowie drogi, pobierz wektor względny, a następnie obróć go o odwrotność kąta EntityA.

   relativeX = B.x - A.x
   relativeY = B.y - A.y
   rotatedX = Cos(-Angle) * relativeX - Sin(-Angle) * relativeY
   rotatedY = Cos(-Angle) * relativeY + Sin(-Angle) * relativeX

2
+1 Znacznie bardziej intuicyjna i łatwiejsza w użyciu trygonometria niż matryce.
Ramchandra Apte

Co ze skalą? Kiedy to zastosujesz?
Llamageddon,

Przepraszam, oznaczało rotację.
Llamageddon

6

Pozwól, że spróbuję dać ci coś pomiędzy odpowiedzią The Light Spark a odpowiedzią Elliota, ponieważ z tego, co czytam, naprawdę szukasz algorytmu do naśladowania, a nie tylko rzuconej na ciebie matematyki.

Opis problemu: Biorąc pod uwagę, że masz lokalizację A (50, 50)i nagłówek (ponieważ nie podałeś go, potwierdzę to jako y = 2 * x + 25), znajdź, gdzie B (80, 90)jest relacja Ai nagłówek.

To, co chcesz zrobić, jest dość proste. 1) Przenieś Asię do źródła swojego systemu. Oznacza to po prostu, że lokalnymi Awartościami będą globalne wartości pozycji minus globalne wartości pozycji A. Astaje się (0, 0)i Bstaje (30, 40).

1.1) Nagłówek również musi zostać przesunięty. Jest to w rzeczywistości bardzo łatwe do zrobienia, ponieważ punkt przecięcia y w lokalnych Awarunkach to zawsze 0, a nachylenie nie zmieni się, więc mamy y = 2 * xjako nagłówek.

2) Teraz musimy wyrównać poprzedni nagłówek do osi X. Więc jak to robimy? Najprościej, koncepcyjnie, jest to konwersja z współrzędnych x, y na biegunowy układ współrzędnych. Polarny układ współrzędnych obejmuje Rodległość do położenia i phikąt obrotu od osi x. Rjest zdefiniowany jako sqrt(x^2 + y^2)i phijest zdefiniowany jako atan(y / x). Obecnie większość języków komputerowych definiuje atan2(y, x)funkcję, która robi dokładnie to samo, atan(y/x)ale robi to w taki sposób, że wyniki zwykle wynoszą od -180 stopni do 180 stopni zamiast 0 stopni do 360 stopni, ale albo działają.

Bw ten sposób staje się R = sqrt(30^2 + 40^2) = sqrt(2500) = 50i phi = atan2(40, 30) = 53.13w stopniach.

Podobnie nagłówek teraz się zmienia. Jest to nieco trudne do wyjaśnienia, ale ponieważ nagłówek z definicji zawsze przechodzi przez nasze pochodzenie A, nie musimy się martwić o Rkomponent. Nagłówki są zawsze będzie w formie phi = C, gdzie Cjest stała. W tym przypadku phi = atan(2 * x / x) = atan(2) = 63.435stopnie.

Teraz możemy obrócić system, aby przesunąć nagłówek do osi X systemu lokalnego A. Podobnie jak po przejściu Ado początku systemu, wszystko, co musimy zrobić, to odjąć phinagłówek od wszystkich phiwartości w systemie. Więc phiof Bstaje się 53.13 - 63.435 = -10.305stopniami.

Na koniec musimy przekonwertować z współrzędnych biegunowych na współrzędne x, y. Formułą wykonania tej transformacji są X = R * cos(phi)i Y = R * sin(phi). Dla Bzatem mamy X = 50 * cos(-10.305) = 49.2i Y = 50 * sin(-10.305) = 8.9tak Bw lokalnych-to- Awspółrzędnych znajduje się w pobliżu (49,9).

Mam nadzieję, że to pomaga i jest wystarczająco lekkie dla matematyki, abyś podążał za nią.


1

Musisz znać pozę Istoty A w przestrzeni globalnej (x1, y1, θ), gdzie θ jest orientacją względem osi x.

Aby przekonwertować lokalizację EntityB ze współrzędnej globalnej (x2, y2) na współrzędną lokalną (x2 ', y2'):


  1. Używanie wyrażeń

Globalny na lokalny

x2' = (x2-x1)cosθ + (y2-y1)sinθ

y2' = -(x2-x1)sinθ + (y2-y1)cosθ

Lokalny na globalny

x2 = x2'cosθ - y2'sinθ + x1

y2 = x2'sinθ + y2'cosθ + y1

  1. Za pomocą macierzy:

    R = [cosθ   -sinθ
    
         sinθ    cosθ]
    
    A = [x1
         y1]
    
    B_global = [x2
                y2]
    
    B_local = [x2' 
               y2']

Globalny na lokalny

    B_local = inv(R) x (B_global - A)

Lokalny na globalny

    B_global = R x B_local + A

-2

Mówiąc prosto, byt B potrzebowałby odniesienia do bytu A. Trzeba by wtedy uzyskać różnicę między pozycją bytu A a stanowiskiem bytu B.


3
Nie rozumiem, jak to odpowiada na pytanie.
Anko
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.