Co to jest ćwiartka?

50

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?

SirMathhman
źródło
Historycznie myślę, że najpierw pojawiły się czwartorzędy, a później produkty kropkowe i krzyżowe powstały z czwartorzędów.
2
Znalazłem ten animowany artykuł bardzo pouczający: acko.net/blog/animate-your-way-to-glory-pt2/#quaternions
AShelly
W czystej matematyce uważam, że czwartorzędami są 3 liczby zespolone, takie jak i² = j² = k² = ijk
Vinz243,
Czwartorzędy to najlepszy sposób na płynną interpolację obrotów. Po prostu interpolacja macierzy obrotu nie działa, ponieważ w rezultacie nie zawsze otrzymasz macierz obrotu. Interpolacja kątów Eulera nie powoduje płynnego obrotu. Tak więc w przypadku animacji rotacji, tak jak jest to potrzebne w grafice komputerowej lub robotyce, czwartorzędy są najlepszym rozwiązaniem. I jest przydatne, ale jakoś nie tak często używane rozszerzenie, zwane podwójnymi czwartorzędami, które pozwala reprezentować transformację i rotację
Tobias B

Odpowiedzi:

43

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:

  1. oś obrotu (w postaci 3-wymiarowego wektora)
  2. jak daleko zawrócić wokół tej osi

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.

Philipp
źródło
6
Blokada gimbala nie stanowi problemu w ćwiartkach, jeśli zaczynasz od ćwiartek, a kończysz na ćwiartkach, blokada gimbala włącza się, gdy masz krok, który przekształca się w kąty Eulera lub z powrotem.
maniak zapadkowy
2
Czwartorzędy nie są osią + kątem, są 3 liczbami zespolonymi i skalą.
tranzystor
11
@ tranistor09 czy uważasz, że oboje macie rację? Trzyczęściową urojoną część ćwiartki jednostkowej można interpretować jako wektor jednostkowy wzdłuż osi obrotu, skalowany przez sinus o połowę kąta obrotu. Rzeczywistą częścią czwartorzędu jednostkowego jest cosinus połowy kąta obrotu. Masz więc rację, że nie jest to dokładnie format osi kątowej, ale prawdą jest, że elementy czwartorzędu można interpretować jako oś i (nieliniową) miarę, jak daleko należy obrócić się wokół tej osi.
DMGregory
2
Można również wspomnieć o przewadze czwartorzędów nad matrycą rotacji: można je szybciej łączyć. Podczas łączenia obrotów mnożenie dwóch czwartorzędów wymaga mniej operacji niż mnożenie macierzy.
Przywróć Monikę
3
W rzeczywistości w przestrzeni 2D liczby zespolone są dokładnym analogiem. Pomnóż punkt 2D przez liczbę zespoloną, a ty go obróciłeś - w rzeczywistości jest dokładnie taki sam jak zwykły obrót sin / cos (co powinno być oczywiste, jeśli dobrze rozumiesz liczby zespolone). Można to trochę wykorzystać, ale ostatecznie grafika 2D nie wymaga obecnie tak dużej wydajności, więc nie daje dużej poprawy, chyba że naprawdę dobrze czujesz się przy użyciu liczb zespolonych (których większość ludzi zdecydowanie nie jest - o czym świadczy niewiarygodnie słaby kod oparty na czwartorzędu: D).
Luaan,
13

To jest dodanie do odpowiedzi @ Philipp.

Jakie korzyści zyskujesz, stosując trzy punkty na płaszczyźnie 2D?

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).

Wreszcie, kiedy uważa się za dobrą praktykę korzystania z czwartorzędów?

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.

PKG
źródło
Ilekroć występują obroty 3D, dobrą praktyką jest stosowanie czwartorzędów”. jest tylko trochę za silny. Prawie zawsze jest lepiej; istnieją sytuacje, w których odpowiednie są alternatywy. (Jako przykład niedoskonałości n-ty pierwiastek czwartorzędu jest wielowartościowy)
Jak
1
Czwartorzędy są towarem do użycia i trudnym do wdrożenia. Możesz sobie bez nich poradzić, jeśli znasz blokadę gimbala.
Hatoru Hansou