[Math] Rotacija

Različiti tutorijali napisani od strane naših članova
Post Reply
User avatar
EmP
Veliki brat malih trokuta
Posts: 498
Joined: Tue Sep 01, 2009 10:14 pm
Smallest prime number bigger than 20: 23
Location: Zagreb
Contact:

[Math] Rotacija

Post by EmP » Sat Aug 14, 2010 8:13 pm

Nisam mislio raditi neki veliki tutorial, neg sam ovaj post + diskusija pa ne znam je l ovo pravi podforum.

Ono što vam želim pokazati u ovoj temi je kako rotirati bez trigonometrije (i poznavanja kuta rotacije). Post podrazumjeva da znate što je vektor te da vam zbrajanje vektora nije strano. Recimo da želimo, kako je prikazano na 1. slici, crvenu točku na koordinatama (7, 6) rotirati za kut alfa oko ishodišta. Kut (26.565...°) je namjerno odabran tako da je neki ludi broj u stupnjevima a jednostavan za računanje vektorima. Vektor koji je u smjeru smeđe crte je [2 1]' (2 desno, 1 gore) a njegova normalizirana inačica je
[tex]\frac{1}{\sqrt{5}}\[\begin{matrix}2 \\ 1 \end{matrix}\][/tex]
Image

Na rotaciju točke možemo gledati na slijedeći način: ako zarotiramo x i y osi za kut alfa tada nam je točka (7, 6) u rotiranom koordinatnom sustavu rezultat rotacije crvene točke. Iz škole znate da su vektori i i j jedinični vektori u smjeru koordinatnih osi, i=[1 0]' u smjeru osi x i j=[0 1]' u smjeru osi y. Označimo s k jedinični vektor u smjeru x' i s l jed. vek. u smjeru y'.
Image

E sada račun zarotiranih koordinata. Radijvektor (vektor od ishodišta do točke) zarotirane crvene točke je 7k+6l. Ono što znamo je k (k je jednak jediničnom vektoru u smjeru smeđe crte s 1. slike) a ono što nam nedostaje je vektor l izražen pomoću (matematičari bi rekli "kao linearna kombinacija") vektora i i j. Općenito vrijedi kada v=ai+bj u 2D prostoru zarotiramo za +90° da dobivamo vektor v'=-bi+aj. Pomoću tog znanja, vektor l isčitavamo iz vektora k:
[tex]\vec{k}=\frac{1}{\sqrt{5}}\[\begin{matrix}2 \\ 1 \end{matrix}\]
\vec{l}=\frac{1}{\sqrt{5}}\[\begin{matrix}-1 \\ 2 \end{matrix}\][/tex]
Koordinate zarotirane crvene točke dobivamo slijedećim računom:
[tex]7\vec{k}+6\vec{l}=\frac{1}{\sqrt{5}}(\[\begin{matrix}14 \\ 7 \end{matrix}\]+\[\begin{matrix}-6 \\ 12 \end{matrix}\])=\frac{1}{\sqrt{5}}\[\begin{matrix}8 \\ 19 \end{matrix}\][/tex] što otprilike predstavlja točku (3.6, 8.5).

Primjetite da u računu nije upotrebljeno ništa osim osnovnih operacija (+, -, *, /) i korjenovanje. Život smo si mogli olakšati da nismo odma normalizirali vektore nego tek na kraju dijelili s korjenom. Čemu sve ovo? Pa često se događa da trebate zarotirati objekt tako da je okrenut prema nekoj točki. Znajući koordinate objekta i ciljne točke, vi defakto znate ono što je na 1. slici prikazano smeđom linijom a na 2. s osi x' a funkcije za rotaciju vas traže kut alfa. Bilo bi zgodno kada bi ste funkciji za rotaciju mogli dati vektor smjera umjesto kuta. Dok neko ne napiše takvu funkcije, gradivo ovog posta vam je primjenjivo samo ako ćete ručno vršiti rotaciju. U 3Du ovu matematiku možete relativno lagano upotrijebiti, pomoću vektora k i l lako možete načiniti transformacijsku matricu za rotaciju.
Nexus 64213 blog - IKON: moja verzija JSONa
Stareater blog - lijepe slike kak napreduje kod

Post Reply

Who is online

Users browsing this forum: No registered users and 1 guest