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 ^^
[3D]Obrót wektora o kąt
-
- 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
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.
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.
- mdd
- 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
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).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 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ć.
[3D]Obrót wektora o kąt
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
Link do momentu gdzie zaczyna tłumaczyć o obrotach
Link do filmu
Kod: Zaznacz cały
https://www.youtube.com/watch?v=ZgOmCYfw6os
Link do momentu gdzie zaczyna tłumaczyć o obrotach