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;
}
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? –
Je pense qu'il veut une transformation de traduction via la multiplication matricielle. – Joey
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