Rzecz idzie jakoś tak:

We precalculate these constants everytime we change an angle

    xx = [cos(A)cos(B)]
    xy = [sin(A)cos(B)]
    xz = [sin(B)]

    yx = [sin(A)cos(C) + cos(A)sin(B)sin(C)]
    yy = [-cos(A)cos(C) + sin(A)sin(B)sin(C)]
    yz = [-cos(B)sin(C)]

    zx = [sin(A)sin(C) - cos(A)sin(B)cos(C)]
    zy = [-cos(A)sin(C) - sin(A)sin(B)cos(C)]
    zz = [cos(B)cos(C)]

and the rotation becomes somewhat easier

    x'' = x * xx + y * xy + z * xz
    y'' = x * yx + y * yy + z * yz
    z'' = x * zx + y * zy + z * zz

No i dla mnie bomba, sprawdzałem na papierze że wzory sensowne i dają chyba poprawne obroty, ale ni cholery nie widzę związku z tymi prostszymi równaniami, które można spotkać w typowych książkach. Stąd prosiłbym uprzejmie o namiary na jakieś rzeczowe artykuły, ewentualnie własną interpretację powyższego wycinka.

greetz ;)

2

na pewno daja poprawne obroty, bez perspektywy.
zwiazek jest taki ze najpierw prekalkujesz sobie te yx yy yz oraz zx zy i zz dla wszystkich katow o jakie bedziesz obracal, a potem voila....

3

No okay mikey, ale mi chodzi o to jak te równania wyprowadzono. Poprostu chciałbym je zrozumieć, a nie tylko zrzynać i implementować. ;)

4 Ostatnio edytowany przez laoo/ng (2006-01-27 11:14:02)

"Rotacje ksiazkowe" o ktorych wspominales sa latwiejsze do wyobrazenia. Sa to trzy rotacje na plaszczyznie. Tu wykorzystano rotacje trojwymiarowe. Zeby to zrozumiec trzeba orientowac sie troche w algebrze liniowej dokladniej w operacjach na macierzach. Roznica pomiedzy  wzorami "ksiazkowymi", a tymi polega na tym, ze w "ksiazkach" po cichutku wykorzystano mnozenie wektora dwuwymiarowego, a wiec zrzutowanego punktu na kazda z plaszczyzn przez macierz 2x2. Sa trzy osie a wiec robi sie to trzy razy. Tu zaś mnozy sie odrazu caly wektor xyz przez maciez 3x3. Macierze obrotow sa takie fajne, ze mozna je wymnozyc i wyjdzie jedna maciez przez ktora wystarczy przemnozyc nasz wektor. Jest jeszcze pojecie macierzy 4x4 i wektora xyzw wowczas otrzymujemy jeszcze przesuniecie i te metode wykorzystuje sie najczesciej. Najfajniejsze sa kwaterniony, bo pozwalaja na rotacje w kazdej osi "niezaleznie" od orientacji obiektu, ale tu wychodzimy juz zdecydowanie poza elementarena wiedze z algebry liniowej.

Teraz przyszpanuje moja znajomoscia LaTeXa i zaprezentuje cos, co moze pomoze (mam nadzieje, ze nie piepsznalem sie w zadnym miejscu):

http://icomp-systems.com/rotacje.png

(teraz zauwazylem, ze wspolrzedne macierzy numeruje sie odwrotnie, ale nie chce mi sie jeszcze raz tego pisac)

PS: dziwnym trafem moje wzory sa troche inne od tamtych i nie wiem kto ma zle, ale to latwo mozna przeliczyc sobie samemu i zweryfikowac

5

Wzory będą wychodzić nieco różne w zależności od orientacji układu współrzędnych (czy jak to się tam nazywa - chodzi o to, że 3 prostopadłe osie można narysować z różnymi zwrotami), kierunku oraz kolejności obrotów.

Warto nadmienić, że mnożenie funkcji sin/cos można przekształcić na dodawanie/odejmowanie, co daje jeszcze bardziej wielgachne wzory, ale można policzyć całą macierz w jakieś 300 cykli przy użyciu zwykłej tablicy sinusa. Gotowe procki w Numenie.

https://www.youtube.com/watch?v=jofNR_WkoCE

6

śmigło .::. napisał/a:

No okay mikey, ale mi chodzi o to jak te równania wyprowadzono. Poprostu chciałbym je zrozumieć, a nie tylko zrzynać i implementować. ;)

To się nazywa algebra liniowa (wykładana zazwyczaj na pierwszym semestrze studiów o kierunku technicznym/ścisłym).

https://www.youtube.com/watch?v=jofNR_WkoCE

7

Rozumiem że:
alfa - kąt obrotu wokół osi x
beta - y
gamma - z

Jak coś przekręciłem to poprawić.

Wzorki wyszły Ci trochę inne, a i wyniki też nieco się różnią (jeśli obrót punktu wokół osi z o 180 stopni powinien dać zmianę znaku współrzędnej y, a dopiero spostrzegłem że tak chyba ma być, to są OK), ale nie wchodząc w szczegóły, samą ideę już łapię. Wielkie dzięki. Na QP'06, jeśli będę, jeszcze raz stawiam Alpen Golda. :)