[3D]Obrót wektora o kąt

Obiekty i przekształcenia geometryczne, opisane za pomocą układu (nie zawsze prostokątnego) współrzędnych.
calgonit
Użytkownik
Użytkownik
Posty: 3
Rejestracja: 21 paź 2014, o 13:54
Płeć: Mężczyzna
Lokalizacja: Polska

[3D]Obrót wektora o kąt

Post autor: calgonit »

Witam.
Zanim przejdę do problemu, zacznę od krótkiego wprowadzenia.
Piszę program, który ma symulować bieg promienia światła przez soczewkę sferyczną (pełne 3D).
Doszedłem do momentu, w którym mam :
wektor promienia,
punkt z którego promień biegnie,
punkt kolizji promienia ze sferą,
wektor normalny do sfery w punkcie kolizji,
i punkt środka sfery oczywiście.

i tu pojawia się problem, gdyż promień ten powinien ulec refrakcji i zmianie wektora - kąt padania/kąt odbicia. Kombinowałem i nic z tego nie wyszło. Nie mam bladego pojęcia jak obrócić wektor promienia o odpowiedni kąt w 3D, na płaszczyźnie to nie problem. Kwestia wyprowadzenia kąta załamania jest banalna, problemem jest obrócić wektor o ten kąt. Wydaje mi się, że wektor padania, załamania i wektor normalny w punkcie kolizji leżą w jednej płaszczyźnie ale za bardzo mi to nie pomogło :S

Pozdrawiam. Liczę na waszą pomoc ;] ps. mam nadzieję, że temat założyłem w dobrym miejscu ^^
lelel555
Użytkownik
Użytkownik
Posty: 67
Rejestracja: 21 paź 2012, o 20:56
Płeć: Mężczyzna
Lokalizacja: Warszawa
Podziękował: 7 razy

[3D]Obrót wektora o kąt

Post autor: lelel555 »

hm... dopiero zaczynam algebrę liniową, ale wpadłem na taki pomysł:

skoro mamy obrócić wektor w jakiejś ustalonej płaszczyźnie, to powinno się dać zrobić tak, by przedstawić te dwa wektory w 2D. gdzie to 2D to ta płaszczyzna.
nazwijmy go \(\displaystyle{ \vec w = [a,b]}\). Znamy a, znamy b.
chcemy go obrócić o zadany kąt \(\displaystyle{ \alpha}\) tak, aby otrzymać wektor \(\displaystyle{ \vec v=[c,d]}\)
Ponieważ go tylko obracamy, to \(\displaystyle{ a^2+b^2=c^2+d^2 \\
\therefore d=\sqrt{a^2+b^2-c^2}}\)
.

\(\displaystyle{ \cos\alpha=\frac{|\vec w|\cdot|\vec v|}{ac+bd} =\frac{|\vec w|^2}{ac+bd}\\
(ac+bd)\cos\alpha=a^2+b^2\\
(ac+b\cdot \sqrt{a^2+b^2-c^2} ) \cos \alpha = a^2+b^2 \\}\)


masz zatem implicytnie funkcję c. Jeśli wyznaczysz jakoś c, to masz i d. (uwaga na znaki plus/minus)
może Ci się przyda. Bo tylko c,d są niewiadomymi, reszta to dane.

dalej widzę żmudne rachunk: pierwiastek na prawo, reszta na lewo. Przyłożyć stronami do kwadratu.
Jak się przyjżysz, to masz funkcję kwadratową. A to już chyba nie problem
Uważaj na znaki plus/minus.
Awatar użytkownika
mdd
Użytkownik
Użytkownik
Posty: 1897
Rejestracja: 14 kwie 2013, o 10:58
Płeć: Mężczyzna
Lokalizacja: Warszawa
Podziękował: 2 razy
Pomógł: 512 razy

[3D]Obrót wektora o kąt

Post autor: mdd »

calgonit pisze: Nie mam bladego pojęcia jak obrócić wektor promienia o odpowiedni kąt w 3D, na płaszczyźnie to nie problem. Kwestia wyprowadzenia kąta załamania jest banalna, problemem jest obrócić wektor o ten kąt.
Zatem załóżmy, że wektor jednostkowy \(\displaystyle{ \vec{w}_2}\) powstaje w wyniku przekształcenia wektora jednostkowego \(\displaystyle{ \vec{w}_1}\) przy obrocie o kąt \(\displaystyle{ \alpha}\), w płaszczyźnie prostopadłej do wektora jednostkowego \(\displaystyle{ \vec{n}}\) (przypomnij sobie równanie normalne płaszczyzny).

Zatem wektory \(\displaystyle{ \vec{w}_1, \vec{w}_2}\) leżą w tej samej płaszczyźnie.
Kąt pomiędzy nimi wynosi \(\displaystyle{ \alpha}\). Z tych faktów oraz z własności iloczynu skalarnego dostajemy układ równań:

\(\displaystyle{ \begin{cases} \vec{w}_1 \cdot \vec{n}=0 \\ \vec{w}_2 \cdot \vec{n}=0 \\ \vec{w}_1 \cdot \vec{w}_2=\cos \alpha \end{cases}}\)

To powinno zadziałać.
calgonit
Użytkownik
Użytkownik
Posty: 3
Rejestracja: 21 paź 2014, o 13:54
Płeć: Mężczyzna
Lokalizacja: Polska

[3D]Obrót wektora o kąt

Post autor: calgonit »

Dziękuje za odpowiedź. Problem rozwiązałem stosując kwatermiony. Pozwalają obracać punkt w przestrzeni dookoła osi tworzonej przez wektor. Podsyłam link do filmu na YT. Pan Mateusz z YT doskonale wytłumaczył ten problem. Tak czy inaczej dziękuję za odpowiedzi i poświęcony czas

Link do filmu

Kod: Zaznacz cały

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


Link do momentu gdzie zaczyna tłumaczyć o obrotach
ODPOWIEDZ