Page 1 of 1

At konvertere en 2d homogen rotationsmatrice til 3d?

Posted: 25 Mar 2008, 18:01
by cluq
Hej matematik-hoveder

Jeg har en 2d homogen rotationsmatrice som skal laves om til en 3d homogen rotationsmatrice (DirectX, D3DXMATRIX for at være helt præcis).

Hvorledes gør jeg det korrekt?

Indtil videre har jeg min 2d homogene rotationsmatrice:

Code: Select all

|a,b,c|
|d,e,f|
|g,h,i|
Og jeg har ved trial and error lavet den om til en 3d homogene matrice således:

Code: Select all

|a,b,c,0|
|d,e,f,0|
|0,0,1,0|
|g,h,0,i|
Men holder den i retten? - indtil videre får jeg det korrekte resultat ud på skærmen, men jeg vil nødig give mig til at teste alle afskygninger af mulige rotationsmatricer for at finde ud af om min konvertering er korrekt.

Re: At konvertere en 2d homogen rotationsmatrice til 3d?

Posted: 25 Mar 2008, 19:47
by Mort
Jeg ville umiddelbart mene at din matrice skulle se således ud:

Code: Select all

|a,b,0,c|
|d,e,0,f|
|0,0,1,0|
|g,h,0,i|
Da du dermed erstatter Z komponenten i matricen med 0 og får skubbet din W komponent ud hvor den hører hjemme... Men hvis den matrice du selv har beskrevet virker, hvorfor så ikke bare bruge den ?

Re: At konvertere en 2d homogen rotationsmatrice til 3d?

Posted: 25 Mar 2008, 23:10
by beyond
Når man roterer i 2D roterer man i omkring en akse, der peger ind i øjet - en implicit z-akse.

En rotationsmatrix kan se således ud,
[c]|c -s 0|
|s c 0|
|0 0 1|,[-c]
c er cos(v), s er sin(v), v er vinklen der roterers med.

Når du vil hoppe fra 2D til 3D, skal du bestemme dig for hvilken akse du roterer om, da det både kan være x, y eller z-aksen. Du udvider dit rum med endnu en dimension, som ikke er beskrevet i 2D-versionen. Er det stadig z-aksen, du vil rotere om, skal matricen se således ud:

[c]
|c -s 0 0|
|s c 0 0|
|0 0 1 0|
|0 0 0 1|
[-c]

Den opmærksomme læser ( :) ) vil se at når man roterer om k-aksen, forbliver værdierne i k-dimensionen konstante --- der er en enheds række i k-rækken i matricen.

Re: At konvertere en 2d homogen rotationsmatrice til 3d?

Posted: 25 Mar 2008, 23:47
by cluq
@Mort

Du har fuldstændig ret - matricen skal se ud som du beskriver.

Og så besvarede du vist også dit eget spørgsmål om hvorfor jeg gerne ville have det løst: Min løsning gav umiddelbart et korrekt resultat, men var ikke korrekt - så jeg kunne i teorien godt komme i situationer hvor løsningen ikke ville virke.