Oświadczenie: Jestem profesjonalnym programistą gier i używam czwartorzędów przez większość dni, ale są one dla mnie bliskie czarnej magii. Jestem względnie w domu z matematyką, ale wyimaginowane liczby zawsze mnie myliły. Często traktuję quaty jako użyteczne i wielokrotnie odwracam multiplikacje. Staram się je rozumować tak, jak w przypadku macierzy z ograniczonym sukcesem.
W każdym razie....
Co mnie zaskakuje, jest następujące. Kiedy chcę obrócić obiekt wokół jego lokalnej osi, mnożę jego obrót przez ćwiartkę reprezentującą obrót, który chcę zastosować. Jest to zatem obrót w przestrzeni lokalnej.
Teraz, jeśli chcę obrócić go wokół osi w przestrzeni świata, moje rozumowanie brzmiałoby następująco: weź obrót w przestrzeni świata jako czwartorzęd. Pomnóż odwrotność obrotu mojego obiektu przez ten czwartorzęd. Spowoduje to obrót mojego świata w przestrzeni lokalnej. Pomnóż moją rotację dzięki tej nowej ćwiartce. tj .: newRot = oldRot * (odwrotny oldRot * worldRot)
Muszę jednak zrobić newRot = oldRot * (odwrotny oldRot * worldRot) * oldRot.
Dlaczego po pomnożeniu z odwrotnym quatem nadal muszę go pomnożyć przed własnym quatem? Wiem, że musi istnieć doskonały ważny powód, ale nie mogę się z tego wytłumaczyć, co jest dla mnie frustrujące. Próbowałem różnych pytań i tak dalej, ale większość z nich zagłębiała się w matematykę, co dla mnie było mniej jasne.
Ktoś, kto może mi to wyjaśnić, jakbym miał 5 lat?
źródło
I try to reason about them like I would with matrices
- wtedy jesteś na dobrej drodze. Jeśli zrozumiałeś, jak obracać się wokół osi obiektu i osi świata za pomocą macierzy, możesz zrobić to samo, używając czwartorzędów. Kolejność mnożenia jest taka sama dla macierzy i czwartorzędów.Odpowiedzi:
Czwartorzędy są asocjacyjne:
wspominasz, że twoje rozwiązanie to:
który jest taki sam jak:
który jest taki sam jak:
co w rzeczywistości prowadzi Cię do tego, co się naprawdę dzieje:
Kolejność aplikacji się zmienia, to wszystko. Wracając do macierzy, kiedy zastosujesz macierz obiektową do macierzy transformacji i zapiszesz ją jako nową macierz obiektową, to będzie twoja lokalna transformacja przestrzeni. Kiedy zastosujesz macierz transformacji do macierzy obiektów i zapiszesz ją, to przekształcisz świat. Chodzi o kolejność aplikacji i nic więcej.
źródło