Biorąc pod uwagę nazwany obiekt EntityA
, chcę zdefiniować lokalną przestrzeń współrzędnych, w której pozycja EntityA
jest punktem początkowym, jego wektorem kierunku jest oś X, a normalną wektorem kierunku jest oś Y:
Biorąc pod uwagę ich globalne współrzędne, jak znaleźć pozycję innego bytu w EntityA
lokalnej przestrzeni?
Przykład: EntityA
globalna pozycja to (50,50), a pozycja EntityB
to (80,90). Jaka jest zatem pozycja EntityB
w EntityA
lokalnej przestrzeni?
EDYCJA: Proszę, nie przejmuj się matematyką.
źródło
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.
źródło
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 jakoy = 2 * x + 25
), znajdź, gdzieB (80, 90)
jest relacjaA
i nagłówek.To, co chcesz zrobić, jest dość proste. 1) Przenieś
A
się do źródła swojego systemu. Oznacza to po prostu, że lokalnymiA
wartościami będą globalne wartości pozycji minus globalne wartości pozycjiA
.A
staje się(0, 0)
iB
staje(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
A
warunkach to zawsze 0, a nachylenie nie zmieni się, więc mamyy = 2 * x
jako 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
R
odległość do położenia iphi
kąt obrotu od osi x.R
jest zdefiniowany jakosqrt(x^2 + y^2)
iphi
jest zdefiniowany jakoatan(y / x)
. Obecnie większość języków komputerowych definiujeatan2(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ą.B
w ten sposób staje sięR = sqrt(30^2 + 40^2) = sqrt(2500) = 50
iphi = atan2(40, 30) = 53.13
w 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ć oR
komponent. Nagłówki są zawsze będzie w formiephi = C
, gdzieC
jest stała. W tym przypadkuphi = atan(2 * x / x) = atan(2) = 63.435
stopnie.Teraz możemy obrócić system, aby przesunąć nagłówek do osi X systemu lokalnego
A
. Podobnie jak po przejściuA
do początku systemu, wszystko, co musimy zrobić, to odjąćphi
nagłówek od wszystkichphi
wartości w systemie. Więcphi
ofB
staje się53.13 - 63.435 = -10.305
stopniami.Na koniec musimy przekonwertować z współrzędnych biegunowych na współrzędne x, y. Formułą wykonania tej transformacji są
X = R * cos(phi)
iY = R * sin(phi)
. DlaB
zatem mamyX = 50 * cos(-10.305) = 49.2
iY = 50 * sin(-10.305) = 8.9
takB
w lokalnych-to-A
współ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ą.
źródło
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'):
Globalny na lokalny
Lokalny na globalny
Za pomocą macierzy:
Globalny na lokalny
Lokalny na globalny
źródło
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.
źródło