Page 1 of 1

Translasjon grunnet rotasjon

Posted: 17/10-2013 12:58
by Aleks855
Sitter med ei øving i 3D-programmering (OpenGL) og har ei problemstilling jeg ikke ser løsninga på.

Jeg har et objekt som er plassert i punktet (x, y, z) og jeg skal rotere dette objektet 45 grader rundt en akse (la oss si x-aksen, men jeg skal implementere det samme for alle 3 akser).

Jeg må vite hvor objektet befinner seg etter denne rotasjonen, med hensyn på de gamle koordinatene.

Eksempel; jeg har en kube med sentrum i (1, 1, 1) og skal rotere den 45 grader rundt x-aksen. Hva blir den nye posisjonen?

Har blitt kodeblind og Lineær Algebra-blind.

Re: Translasjon grunnet rotasjon

Posted: 17/10-2013 16:01
by Brahmagupta
Følgende matrise utfører en rotasjon med vinkel [tex]\theta[/tex] om x-aksen. Det skulle være greit ut fra denne å finne tilsvarende matrise for y og z aksen.

[tex]\left( \begin{array}{ccc} 1 & 0 & 0 \\ 0 & \cos{\theta} & -\sin{\theta} \\ 0 & \sin{\theta} & \cos{\theta} \end{array} \right)[/tex]

Re: Translasjon grunnet rotasjon

Posted: 17/10-2013 17:11
by Aleks855
Den hadde i utgangspunktet vært grei, men i dette tilfellet så har jeg allerede utført selve rotasjonen. Det jeg trenger nå er en formel for hvor sentrum av kuben befinner seg etter en rotasjon på $\theta$ rundt en akse.

Re: Translasjon grunnet rotasjon

Posted: 17/10-2013 17:38
by Vektormannen
Hva vil det mer spesifikt si at du har utført rotasjonen? (Altså, har du funnet de nye koordinatene til hjørnepunktene, rotert sideflatene, eller hva?)

Re: Translasjon grunnet rotasjon

Posted: 17/10-2013 18:07
by Aleks855
Hehe, det er litt vanskelig å forklare. Kanskje bedre om jeg viser det frem?

http://youtu.be/Rg7epygfafA

Altså trenger jeg å fortelle kuben, nå er du rotert. Du befant deg i punktet (x,y,z), men nå befinner du deg i punktet (u,v,w).

På den måten vil riktige kuber velges for rotering etter diverse andre rotasjoner har vært gjort.

Forresten, formelen trenger ikke være HELT generell. Hver rotasjonsmetode roterer kun rundt EN akse. Altså kan det greit være tre forskjellige formler; en for rotering rundt x-aksen, en for rotering rundt y-aksen osv.

Re: Translasjon grunnet rotasjon

Posted: 17/10-2013 18:48
by Brahmagupta
Hvis du definerer [tex]T(x)=Ax[/tex] hvor A er matrisen i forrige posten, så vil T benyttet på senteret i en av de 9 kubene i det aktuelle
området gi deg senteret for denne kuben etter rotasjonen (om x-aksen).

Re: Translasjon grunnet rotasjon

Posted: 18/10-2013 13:03
by Aleks855
Ser ut som det fungerer til en viss grad med den teknikken, ja. Men av en eller annen grunn så blir fargene byttet om under prosessen, og jeg ser ikke grunnen. Alt jeg gjør er å sende nye center-koordinater. =(

Re: Translasjon grunnet rotasjon

Posted: 18/10-2013 14:30
by Gustav
Jeg tillater meg å innføre litt notasjon for å være i stand til å beskrive problemstillingene mer presist.

Si at den store kuben består av 3*3*3 mindre kuber med sidelengder 1, som er indeksert $a_{x,y,z}$, der $x,y,z=\{-1,0,1\}$, slik at $a_{0,0,0}$ er kuben i midten, $a_{1,y,z}$ er kubene som har positiv x-koordinat etc.

I startposisjonen vil nå kube $a_{x,y,z}$ ha sentrum i $(x,y,z)$. I tillegg må du gi hver kube to ortogonale "retningsvektorer" som entydig bestemmer hvordan kuben er rotert relativt sitt eget sentrum (og disse må oppdateres ved å bruke de rotasjonsmatrisene som brahmagupta foreslo etter hver rotasjon). På den måten kan man holde oversikt over at hver sideflate i hver kube har riktig farge etter rotasjonene.

Re: Translasjon grunnet rotasjon

Posted: 18/10-2013 15:01
by Aleks855
Brahmagupta wrote:Følgende matrise utfører en rotasjon med vinkel [tex]\theta[/tex] om x-aksen. Det skulle være greit ut fra denne å finne tilsvarende matrise for y og z aksen.

[tex]\left( \begin{array}{ccc} 1 & 0 & 0 \\ 0 & \cos{\theta} & -\sin{\theta} \\ 0 & \sin{\theta} & \cos{\theta} \end{array} \right)[/tex]
Kjapt, er ikke dette rotasjon i xy-planet? Altså rundt z-aksen?

Re: Translasjon grunnet rotasjon

Posted: 18/10-2013 15:18
by Brahmagupta
Nei, det er riktig som jeg skrev. Matrisen fikserer jo hele x-aksen!