Autor Wątek:  Obliczanie współrzędnych w rotacji 3D  (Przeczytany 4186 razy)

0 użytkowników i 1 Gość przegląda ten wątek.

Offline Mariusz1970

  • Zasłużony dla Symulatora
  • Wiadomości: 3926
    • Zobacz profil
  • Otrzymane polubienia: 279
Obliczanie współrzędnych w rotacji 3D
« dnia: 13 Września 2016, 23:39:16 »
Cześć,
Może ktoś ogarnie temat. Otóż natrafiłem na ścianę i walę głową w mur. Uparłem się, aby zrobić exe do drutowania, ale takie, które niezależnie od liczby rotowanych osi i wielkości rotacji, ma być zawsze dobrze. Jest problem, jeśli dany punkt ma być jednocześnie rotowany w 3 osiach z dużymi rotacjami np. x=40 st., y=50, z=90. Gdy rotacja jest w x,z lub y,z jest ok, niezależnie od wielkości rotowania. Problem ten dotyczy również skryptu php, jak również chyba ten sam problem dotyczy arkusza OO kolegi Transkei'a, który był tak miły i mi go przesłał. Próbowałem różnych metod, nawet rachunek macierzowy, kwaterniony i zawsze podobny efekt. Wiem, że dla praktycznego wykorzystania, jest to zbędna zabawa, bo słupy w sceneriach nie są mocno rotowane jednocześnie w 3 osiach i związku z tym, błąd może być pomijalny i zresztą jest. Jednak mi zależy na pełnej funkcjonalności. Aktualny sposób, w którym obliczam współrzędne, to kolejno wywołuje funkcje obliczające współrzędne danej rotacji.
Wywołuje kolejno: rotx, roty, rotz.
rotx modyfikuje współrzędne y,z
roty modyfikuje współrzędne x,z
rotz modyfikuje współrzędne x,y

Czyli jeśli wywołam rotx a następnie roty, to roty już ma na wejściu zmodyfikowane współrzędną z przez rotx. Zauważyłem taką sprawę, że jeśli rotacja x i y będzie sobie równa np. 60 stopnii, to jeśli wywołam roty,rotx,rotz, to idealnie wylicza. Ten ideał jest tylko właśnie w przypadku równych kątów rotacji. Natomiast ta kolejność wywoływania funkcji, psuje pozostałe przypadki, gdzie było dobrze.
No mogę zgodnie z zasadą, że najlepszym rozwiązaniem problemu, jest jego ominięcie :), czyli, jeśli będzie we wpisie rotacja po x i y, to ktorąś z nich wyzeruje. Będzie to i tak bardziej funkcjonalnie, niż dotychczasowymi skryptami, ale to ostateczność.
Liczę na to, że ktoś z forumowiczów, okaże się dobrym matematykiem :)

Ps. osie x,y,z nazywam zgodnie konwencją przyjętą w szkołach, czyli z to wysokość

  Dodano: 14 Września 2016, 01:02:51
Problem rozwiązałem. Kolejność wywoływania funkcji, to roty,rotx,rotz  i będzie dobrze. Nie wychodziła mi próba, gdyż kolejność funkcji zmieniałem, a zapomniałem zmieniać rotację. Dlatego przy równych kątach x i y było dobrze :)
W zasadzie temat można zamknąć. Można też w skryptach php zmienić to.
« Ostatnia zmiana: 14 Września 2016, 01:02:52 wysłana przez Mariusz1970 »