2009-09-30 15 views
2

J'ai une matrice 4 * 4 et un vecteur 3d. J'ai besoin de traduire mon vecteur par la matrice.Traduire le vecteur par matrice

Pas trop de notation de maths folle parce que je ne comprends pas.

Un exemple dans quelque chose de proche de java serait fabuleux!

+1

Vous ne pouvez pas traduire un vecteur par une matrice. Vous pouvez multiplier un vecteur par une matrice ... c'est ce que vous voulez dire? –

+1

Je pense qu'il veut une transformation de traduction via la multiplication matricielle. – Joey

+0

Le vecteur aurait besoin d'être étendu (à 4 dimensions) ou la matrice aurait besoin de perdre une ligne, afin de permettre de multiplier la matrice par le vecteur ... – mjv

Répondre

10

C'est assez facile une fois que vous le voyez.

(New-3d-point) = Metrix-4x4 x (Old-3d-point) 

signifie ...

|x_new| |a1 a2 a3 a4| |x_old| 
|y_new| = |b1 b2 b3 b4| x |y_old| 
|z_new| |c1 c2 c3 c4| |z_old| 
| 1 | |d1 d2 d3 d4| | 1 | 

moyens ...

x_new = a1*x_old + a2*y_old + a3*z_old + a4 
y_new = b1*x_old + b2*y_old + b3*z_old + b4 
z_new = c1*x_old + c2*y_old + c3*z_old + c4 

-d1 d4 sont là pour '1' de sorte que vous n'avez pas besoin de l'utiliser.

Espérons que cela aide.

2

Si vous traitez votre (généralement 3d) vecteur (x, y, z) comme vecteur de quatre (x, y, z, 1) vous pouvez faire: w = AvT, où T est l'opération de transposition (tordre un vecteur horzontal vertical ou vice versa) et A est une matrice correctement choisie, et w est la matrice traduite.

Vous devez savoir comment faire une multiplication matricielle.

Pour obtenir une transposition par (a, b, c) et rien d'autre définissent A comme:

1 0 0 a 
0 1 0 b 
0 0 1 c 
0 0 0 1 
3

Vous avez besoin des mathématiques, cependant. Je vais essayer d'être doux, mais si vous ne savez pas comment faire la multiplication de la matrice, vous devez le rechercher, maintenant! D'abord, vous devez faire de votre vecteur 3D un vecteur 4, en lui ajoutant 1 supplémentaire. L'infographie l'appelle généralement une coordonnée "w" (pour aller avec les coordonnées x, y et z).

vecteur 3D (X, Y, Z) -> vecteur 4D: (x = X, y = Y, z = Z, w = 1)

Ensuite, vous pouvez multiplier le 4- vecteur par la matrice 4x4. Ce que cela ne dépend de la matrice - mais vous pouvez faire une matrice qui se traduit par le vecteur:

[x,y,z,1] * [1 0 0 0] = [x+a,y+b,z+c,1] 
      [0 1 0 0] 
      [0 0 1 0] 
      [a b c 1] 

Sans surprise, ce genre de matrice est appelée une matrice de traduction.

L'avantage de faire les choses de cette façon est que vous pouvez également faire une matrice de rotation, ou une matrice de mise à l'échelle, alors vous pouvez multiplier autant d'entre eux que vous voulez ensemble dans une matrice:

v * M1 * M2 * M3 = v * (M1*M2*M3) 

Multiplier un vecteur par la matrice résultante équivaut à multiplier par toutes les matrices composantes en séquence, ce qui, comme vous pouvez l'imaginer, peut vous faire gagner beaucoup de temps et de tracas.


code pour multiplier un 4-vecteur par une matrice 4x4 pourrait être quelque chose comme:

for(int i=0; i<4; ++i) { 
    double accumulator= 0.0; 
    for(int j=0; j<4; ++j) { 
    accumulator+= rowVectorIn[j]*matrix[j][i]; // matrix is stored by rows 
    } 
    rowVectorOut[i]= accumulator; 
} 
1

Je ne sais pas exactement quelle forme vos données vient en mais juste au premier coup d'oeil, il semble comme vous pourriez avoir affaire à quaternions. Sans trop entrer dans les mathématiques, il existe deux façons de représenter une transformation matricielle tridimensionnelle. Il y a des angles et des quaternions d'Euler. Les angles d'Euler sont nettement plus simples, mais les quaternions ont l'avantage de ne pas être sensibles au verrou gimble.

Les quaternions de valeurs réelles en trois dimensions sont représentées par des matrices 4x4, c'est pourquoi j'ai pensé que cela pourrait s'appliquer à vous. Bien sûr, les auteurs des autres solutions peuvent avoir raison et ce que vous avez à faire pourrait être quelque chose de totalement différent, mais il pourrait être utile d'en apprendre de toute façon.

Espérons que cela aide. Bonne chance!

+0

Quaternions ne sont pas des matrices 4x4, ce sont des vecteurs à 4 dimensions utilisent principalement pour la rotation, voir ceci: http://www.euclideanspace.com/maths/algebra/realNormedAlgebra/quaternions/index .htm – greg93

Questions connexes