Co to jest ćwiartka i jak działają? Jakie korzyści zyskujesz, stosując trzy punkty na płaszczyźnie 2D? Wreszcie, kiedy uważa się za dobrą praktykę korzystania z czwartorzędów?
mathematics
terminology
SirMathhman
źródło
źródło
Odpowiedzi:
Matematycznie czwartorzęd jest liczbą zespoloną o 4 wymiarach. Ale przy opracowywaniu gier czwartorzędu często używa się do opisania obrotu w przestrzeni 3D, kodując:
Zauważ, że ta informacja jest zakodowana za pomocą sinusów i cosinusów wewnątrz czwartorzędu, więc ogólnie nie powinieneś próbować jawnie ustawiać lub odczytywać osobno wewnętrznych składników czwartorzędu (xyzw). Łatwo jest w ten sposób popełnić błąd i uzyskać nieistotny wynik. Biblioteka matematyczna czwartorzędu zwykle zapewnia funkcje do działania na czwartorzędach (np. Konwersja ich do i z kątów Eulera lub kąta osi), co zapewnia, że matematyka jest poprawna i ma dodatkową zaletę, ułatwiając czytanie i zrozumienie kodu.
Alternatywnym sposobem opisania obrotów jest opisanie, jak daleko należy obrócić się wokół 3 stałych osi „x, y i z (aka kąty Eulera), która wymaga tylko 3 liczb zamiast 4 i jest zwykle bardziej intuicyjna w użyciu. Kąty Eulera podlegają jednak problemowi zwanemu blokadą gimbala : po obróceniu o 90 ° wokół jednej osi pozostałe dwie osie stają się równoważne. W przypadku czwartorzędów ten problem nie występuje.
Innym sposobem wyrażania rotacji w przestrzeni 3D jest macierz transformacji 4x4 . Ale dzięki macierzy transformacji możesz nie tylko obracać, ale także skalować, tłumaczyć i pochylać. Gdy chcesz tylko rotacji, macierz byłaby przesada, a ćwiartka znacznie szybsze i prostsze rozwiązanie.
Ten problem dotyczy tylko przestrzeni 3D. W przestrzeni 2d masz tylko jedną oś obrotu. Każdy obrót można wyrazić za pomocą pojedynczej liczby zmiennoprzecinkowej lub pojedynczej liczby zespolonej, więc nie masz tego problemu. Chociaż teoretycznie można wyrazić obrót na płaszczyźnie 2d za pomocą czwartorzędu, w którym oś skierowana jest na płaszczyznę (lub poza nią), zwykle jest to nadmiar.
źródło
To jest dodanie do odpowiedzi @ Philipp.
Tak naprawdę nie potrzeba quaternions jeśli wszystko jesteś zainteresowany jest w obracający się na płaszczyźnie, czyli o osi z. W takim przypadku wystarczy kąt odchylenia i można wykorzystać fakt, że kolejne obroty wokół osi Z dojeżdżają do pracy. Możesz więc zastosować swoje obroty w dowolnej kolejności.
Sytuacja wygląda inaczej, jeśli obracasz się na płaszczyźnie, która nie jest płaszczyzną XY. Ten obrót jest równoważny z obrotem wokół dowolnej osi 3D. Teraz masz dwie możliwości:
obróć swoją płaszczyznę w 3D, tak aby pokrywała się z płaszczyzną XY, a następnie ziewnij i przekształć z powrotem, lub
pomyśl o rotacji na początek w 3D.
Drugi wybór jest łatwiejszy do zakodowania. Jak powiedział @Philipp, czwartorzędy unikają blokady gimbala (jeśli unikniesz pośrednich konwersji RPY lub konwersji osi / kąta).
Zawsze, gdy występują obroty 3D, dobrą praktyką jest stosowanie czwartorzędów.
Na przykład:
W Qt . Quaty ułatwiają interpolację między obrotami, podobnie jak w funkcji slerp .
ROS używa ich do przekształcania pozycji robotów.
W silniku dynamiki Bullet
Dla bardzo wyrafinowanego zastosowania, zobacz tutaj ich zastosowanie w klasycznej mechanice 3D.
źródło