2010-02-04 15 views
7

Matryce i kąty Eulera mogą cierpieć na blokadę Gimbala, ale jakie są inne argumenty przemawiające za używaniem jednego na drugim?Jakie są plusy i minusy używania matryc, kątów Eulera i/lub kwateranów do reprezentacji rotacji?

Co sądzi DirectX faworyzuje?

Czego używasz w codziennym programowaniu C++/C/DirectX?

+0

nie związane z programowaniem –

+0

Jestro: Czytanie tutaj: http://en.wikipedia.org/wiki/Gimbal_lock wydaje się, że werdykt ma zastosowanie kwaternionów .Ale nie mam doświadczenia bezpośredniego (kalambur przeznaczone). –

+2

@Mitch: Jest to z pewnością związane z programowaniem, każdy, kto pracuje z grafiką 3D, zajmuje się tymi rzeczami codziennie. –

Odpowiedz

12

Kąty Eulera wymagają tylko trzech parametrów, w przeciwieństwie do przechowywania macierzy (lub trzech, ale brzmi to przesadnie). Kiedy zastosujesz obrót Eulera, prawdopodobnie skończysz z czymś podobnym do trzech multiplikacji macierzy, aby utworzyć transformację. Jeśli korzystałeś tylko z matrycy, możesz nie ponosić tak kosztownych kosztów (w zależności od konstrukcji matrycy). Poza Gimbal Lock, istnieje również problem z efektami anulowania podczas interpolacji macierzowych reprezentacji obrotów, które należy zachować ostrożność.

Możesz chcieć rozważyć kwaternionów. Wymagają czterech parametrów przechowywania, więc nie są bardzo ciężkie. Unikają blokady Gimbal i mogą być interpolowane, aby zapewnić płynne obroty. Jedną z rzeczy, którą można zinterpretować jako wadę kwaternionu, jest to, że niektórzy mogą nie być bardzo intuicyjni. Transformacje matrycowe i kąty Eulera mają typ nachylenia przechyłu lub spin-precesji, co jest dość intuicyjne. Czwartorzędniki są bardziej zbliżone do pojedynczego obrotu wokół osi końca wyniku, która wystaje w ten lub inny sposób.

Zdarzają się przypadki, w których ktoś woli jedną metodę od innych, więc to tylko kilka rzeczy do rozważenia przy podejmowaniu decyzji.

+1

+1. interpolacja i rozwiązywanie blokady kardana jest powodem, dla którego wolałbym kwaterunki. Ale fakt, że większość ludzi używa Matrices ma swoje zalety. –

+0

Myślę, że należy zauważyć, że Matryce nie mogą wejść do Gimbal Lock (przechowują wskazówki, a nie rotacje). – Cygon

0

To nie jest tak naprawdę związane z directx. Możesz użyć dowolnej z tych metod, ale prawdopodobnie liczby kwaterunkowe są łatwiejsze do poradzenia sobie z danymi animacji. W przeciwnym razie nie ma jednego standardowego sposobu radzenia sobie z nim, a zatem utrudnia interpretację danych między programami.

0

Czwartaki są zdecydowanie najtrudniejsze do opanowania, ale gdy już zrozumiesz, o co im chodzi, uznasz je za zaskakująco łatwe w użyciu. Uważam je za lepsze rozwiązanie, a następnie Euler Angles/Matrix przekształca się, ponieważ radzą sobie z problemem, którego nie rozwiązują pozostałe 2 rozwiązania. "Blokada Gimballa".

+0

Kolejny post, wspominając o "Gimbal Lock" jako odkupieńczej własności Quaternions. Jest to problem tylko z kątami Eulera, ani matryce, ani kwaterunki nie są podatne. – Cygon

4

Kąty Eulera cierpią na osobliwości i trudno z nimi pracować. Reprezentacje macierzy NIE MOGĄ mieć tego problemu w przeciwieństwie do wielu odpowiedzi tutaj. Macierzowa reprezentacja orientacji może cierpieć z powodu nagromadzonych błędów, ponieważ używasz 9 liczb dla czegoś, co ma tylko 3 stopnie swobody. Quaternions są bardzo interesujące matematycznie, ale pod koniec dnia naprawdę robią mnożenie macierzy 4x4.

Kwaternia może być również postrzegana jako 3vec, która reprezentuje oś obrotu, a jej długość jest związana z kątem obrotu wokół tej osi (sin kwadratowy?). Czwarty parametr jest obliczany, aby długość 4vec była równa 1. Interpretację tę można przekształcić na równoważną macierz orientacji.

Reprezentacja matrycy może zawierać informacje o skalowaniu i może być rozszerzona na 4x4, aby uwzględnić informacje o położeniu oraz orientację. Możesz przekształcić wektory położenia i kierunku używając transformacji macierzy, która nie jest możliwa przy użyciu dwóch pozostałych.

Możesz zrobić niesamowitą ilość rzeczy po prostu z matrycą 4x4. Czwartorzędności i kąty Eulera robią tylko orientację. Tak, tylko to jedno. Domyślam się, że moje preferencje/uprzedzenia w tej kwestii są dość jasne :-)

+0

Generalnie wolę transformacje afiniczne. Ale gdybym coś ożywiał, prawdopodobnie wybrałbym drogę kwaternioną z powodów interpolacji. W przypadku kompozycji wykresu sceny transformacje afiniczne brzmią jak lepszy wybór. Jeśli ktoś pisał narzędzie rotacyjne dla modelarza lub coś takiego, kąty Eulera mogą wydawać się bardziej naturalne. –