/ Forside / Karriere / Uddannelse / Højere uddannelser / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
Højere uddannelser
#NavnPoint
Nordsted1 1588
erling_l 1224
ans 1150
dova 895
gert_h 800
molokyle 661
berpox 610
creamygirl 610
3773 570
10  jomfruane 570
matrise til rotation om vilkårlig akse
Fra : J Hansen


Dato : 26-10-02 08:24

At opstille en matrise for rotation i henholdsvis x- y- og z-akserne er ret
simpelt, men hvordan gør man hvis man vil lave en rotationsmatrise omkring
en vilkårlig vektor?
Jeg mister lidt overblikket hvis jeg prøver at se hvilke xyz rotationer der
skal til for at ende ud med den ønskede rotation.
Kan man gange tre matriser (x,y og z) sammen vægtet efter vektorens længde
langs netop de akser?



 
 
Jens Axel Søgaard (26-10-2002)
Kommentar
Fra : Jens Axel Søgaard


Dato : 26-10-02 09:45

J Hansen wrote:
> At opstille en matrise for rotation i henholdsvis x- y- og z-akserne
> er ret simpelt, men hvordan gør man hvis man vil lave en
> rotationsmatrise omkring en vilkårlig vektor?

> Jeg mister lidt overblikket hvis jeg prøver at se hvilke xyz
> rotationer der skal til for at ende ud med den ønskede rotation.
> Kan man gange tre matriser (x,y og z) sammen vægtet efter vektorens
> længde langs netop de akser?

Så simpelt er det ikke. Hvis du har lavet rutiner til at rotere om
koordinatsystemets begyndelsespunkt O=(0,0,0), så er denne
metode god:

Rotation om af (v1,v2,v3) om (a,b,c)
i) Træk (a,b,c) fra (v1,v2,v3) og kald den (w1,w2,w3).
[Dvs. (a,b,c) flyttes til (0,0,0)]
ii) Roter (w1,w2,w3) om (0,0,0) på måden du kender.
iii) Læg (a,b,c) til resultatet. Voila!


Jeg brugte to minutter i Google, og fandt denne forklaring,
som tiltaler mig - men jeg er også erhversskadet.

http://www.makegames.com/3drotation/

Sprogligt PS:

Retskrivningsordbogen agiver "en matrix" og "to matricer".
Ordet matrice findes også i ordbogen, men det betyder en støbeform.

--
Jens Axel Søgaard




Søren Galatius Smith (26-10-2002)
Kommentar
Fra : Søren Galatius Smith


Dato : 26-10-02 17:07

"Jens Axel Søgaard" <usenet@soegaard.net> writes:

> J Hansen wrote:
> > At opstille en matrise for rotation i henholdsvis x- y- og z-akserne
> > er ret simpelt, men hvordan gør man hvis man vil lave en
> > rotationsmatrise omkring en vilkårlig vektor?

> Så simpelt er det ikke. Hvis du har lavet rutiner til at rotere om
> koordinatsystemets begyndelsespunkt O=(0,0,0), så er denne
> metode god:

Det er vist ikke det han vil? Det giver rotation om en vilkårlig
linje, parallel med en af koordinatakserne, men ikke om en
ikke-akseparallel linje.

Hvis man vil rotere om en akse givet ved en vektor v kan man vælge en
ortogonal matrix C som afbilder v over i z-aksen, derefter rotere om
z-aksen, og til sidst afbilde z-aksen tilbage til v med matricen
C^(-1).

Søren

Jens Axel Søgaard (27-10-2002)
Kommentar
Fra : Jens Axel Søgaard


Dato : 27-10-02 02:50

Søren Galatius Smith wrote:
> "Jens Axel Søgaard" <usenet@soegaard.net> writes:
>
>> J Hansen wrote:
>>> At opstille en matrise for rotation i henholdsvis x- y- og z-akserne
>>> er ret simpelt, men hvordan gør man hvis man vil lave en
>>> rotationsmatrise omkring en vilkårlig vektor?
>
>> Så simpelt er det ikke. Hvis du har lavet rutiner til at rotere om
>> koordinatsystemets begyndelsespunkt O=(0,0,0), så er denne
>> metode god:
>
> Det er vist ikke det han vil? Det giver rotation om en vilkårlig
> linje, parallel med en af koordinatakserne, men ikke om en
> ikke-akseparallel linje.

Nåh på den led[1]. Så havde Hansen helt ret i, at man bare
skulle gange nogle udvalgte matricer samme.

--
Jens Axel Søgaard

[1] Pun intended




Carsten Svaneborg (28-10-2002)
Kommentar
Fra : Carsten Svaneborg


Dato : 28-10-02 16:30

J Hansen wrote:
> At opstille en matrise for rotation i henholdsvis x- y- og z-akserne er
> ret simpelt, men hvordan gør man hvis man vil lave en rotationsmatrise
> omkring en vilkårlig vektor?

Her er lidt C kode til at udføre en rotation af punktet
(xold,yold,zold) omkring punktet (x0,y0,z0) og aksen
(nx,ny,nz) med vinklen theta igennem dette punkt.

double n=sqrt(nx*nx+ny*ny+nz*nz);
double a11=nx/n; // Cosines of dir.
double a12=ny/n;
double a13=nz/n;

double C=cos(theta);
double S=sin(theta);

double Q11=sq(a11)+(1-sq(a11))*C; // Rotation matrix
double Q12=a11*a12*(1-C)+a13*S;
double Q13=a11*a13*(1-C)-a12*S;
double Q21=a11*a12*(1-C)-a13*S;
double Q22=sq(a12)+(1-sq(a12))*C;
double Q23=a12*a13*(1-C)+a11*S;
double Q31=a11*a13*(1-C)+a12*S;
double Q32=a12*a13*(1-C)-a11*S;
double Q33=sq(a13)+(1-sq(a13))*C;

xt=xold-x0; // vector relative to i0
yt=yold-y0;
zt=zold-z0;

xnew=Q11*xt+Q12*yt+Q13*zt + x0;
ynew=Q21*xt+Q22*yt+Q23*zt + y0;
znew=Q31*xt+Q32*yt+Q33*zt + z0;


Jeg tror den letteste måde at bevise Q rotationsmatricen
er ved at opskrive rotationen i det koordinatsystem der
udgøres af vektoren (nx,ny,nz), retningen af (xt,yt,zt)
vinkelret på (nx,ny,nz) og deres krydsprodukt.

Jeg definere r=(xt,yt,zt). Så er enhedsvektorer i dette
koordinatsystem udgøres af

e1= (nx,ny,nz)
e2= (r-(r.e1)e1)/|r-(r.e1)e1|
e3= e1 x e2

Længden af r projiceret på e1 blot prikproduktet (r.e1), mens
længden af r projiceret på planet med normal e1 (komponenten
langs e2) er |r-(r.e1)e1| og komponenten langs e3 er nul per
konstruktion.

Dvs. r vektoren kan udtrykkes i (e1,e2,e3) koordinatsystemet:

r= (r.e1) e1 + |r-(r.e1)e1|e2 + 0 e3

Projektionen af (xt,yt,zt) på aksen (nx,ny,nz) vil ikke ændres
af en rotation, mens vektorens projektionen på planet med
normal (nx,ny,nz) vil blot udgøre en simpel rotation i 2d.

Dvs. roteres r med vinklen t kan dette let udtrykkes i
(e1,e2,e3) koordinatsystemet som:

r(t)= (r.e1) e1 + cos(t) |r-(r.e1)e1|e2 + sin(t) |r-(r.e1)e1| e3

er t=0 dvs. ingen rotation så fås r tilbage, så det kan ikke
være helt forkert.

Så i dette koordinatsystem kan du altså let udtrykke rotationen
omkring en vilkårlig vektor, og omskriver du denne rotationsligning
fra vektorsprog i (e1,e2,e3) koordinatsystem til matrixsprog i
laboratorie koordinatsystemet ved at indsætte e1,e2,e3 udtrykt
ved (xt,yt,zt) og (nx,ny,nz) så skulle resultatet gerne være
Q matricen gange r.

Til sammenligning er det relativt hård arbejde at udtrykke
rotationen som XYZ rotationer, fordi der først skal udføres
rotationer således at rotationsaksen er parallel med en af
koordinatsystemtsakser, og disse rotationer vil have en
vinkel der afhænger på kedelig vis af vektorer.

--
Mvh. Carsten Svaneborg
http://www.softwarepatenter.dk

Filip Larsen (28-10-2002)
Kommentar
Fra : Filip Larsen


Dato : 28-10-02 18:31

J Hansen skrev

> At opstille en matrise for rotation i henholdsvis x- y- og z-akserne er
ret
> simpelt, men hvordan gør man hvis man vil lave en rotationsmatrise omkring
> en vilkårlig vektor?

Se evt. en tidligere tråd om dette problem:

http://groups.google.com/groups?th=3d2deceb5ded1bb1


Mvh,
--
Filip Larsen <filip.larsen@mail.dk>



Søg
Reklame
Statistik
Spørgsmål : 177552
Tips : 31968
Nyheder : 719565
Indlæg : 6408849
Brugere : 218887

Månedens bedste
Årets bedste
Sidste års bedste