Matrice de Rotation angle donné et le point X,Y,Z
Je suis en train de faire de la manipulation d'image et que je veux faire tourner tous les pixels dans xyz espace basé sur un angle, à l'origine, et x,y, et z coordonner.
J'ai juste besoin de l'installation de la bonne matrice (4x4) et puis je vais être bon à partir de là. L'Angle est en degrés, pas radians et x,y,z sont tous de -1 à 1 (flotteurs)
EDIT:
Ok, voici le code que j'ai fouetté jusqu'à faire la rotation autour d'une ligne définie par l'origine et un X, Y, Z coorinate.
float ang = angD * (float)(Math.PI / 180); //from degrees to radians, if needed
//U = n*n(t) + cos(a)*(I-n*n(t)) + sin(a)*N(x).
var u = MatrixDouble.Identity(4); //4x4 Identity Matrix
u = u.Multiply(Math.Cos(ang));
var n = new MatrixDouble(1, 4, new List<double> { x, y, z, 0 });
var nt = n.Transpose();
//This next part is the N(x) matrix. The data is inputted in Column
//first order and fills in the 4x4 matrix with the given 16 Doubles
var nx = new MatrixDouble(4, 4, new List<double> { 0, z, -y, 0, -z, 0, x, 0, y, -x, 0, 0, 0, 0, 0, 1 });
nx = nx.Multiply(Math.Sin(ang));
var ret = nt.Multiply(n);
ret[3, 3] = 1;
u = u.Subtract(ret);
u = ret.Add(u.Add(nx));
C'est un peu compliqué et je suis en utilisant une mesure de la Matrice de la bibliothèque, mais rien n'y serait trop difficile à mettre en œuvre avec tout le fonctionnement de la Matrice lib.
Ouf, beaucoup de maths!
Je suppose que vous voulez que le point défini par le "x, y et z les coordonnées" rester invariant. Comment êtes-vous représentant un point de l'espace xyz comme un 4-vecteur?
Je ne suis pas représentant les points de 4x4 vecteur. La matrice de transformation est le 4x4 et le point est un 4x1. Les multipliant me met mon p' qui est le pixel ne tourné. Je vais mettre à jour mon post avec le code que j'ai fait.
Un "4x4 vecteur"? Vous n'êtes pas prudent avec la terminologie.
Wow, je me sens stupide. Matrice 4x4 🙂 lol, au moins je n'ai pas dis Matrice!!! heehee
OriginalL'auteur joe_coolish | 2011-03-04
Vous devez vous connecter pour publier un commentaire.
La rotation complète des matrices sont dérivées et donné à https://sites.google.com/site/glennmurray/Home/rotation-matrices-and-formulas.
Du papier:
5.2 de la simplification de La matrice pour les rotations autour de l'origine
Ceci suppose que (u, v, w) est un vecteur directeur de l'axe de rotation et que u^2 + v^2 + w^2 = 1.
Si vous avez un point (x, y, z) que vous souhaitez faire pivoter, alors on peut obtenir une fonction de sept variables qui donne le point de rotation:
f(x, y, z, u, v, w, theta) =
Le document contient également des matrices et des formules pour les rotations autour d'un axe arbitraire (pas nécessairement par l'origine), le code Java disponible sous la licence Apache, et un lien vers une application web qui illustre les rotations.
OriginalL'auteur Glenn
Utiliser la Structure Matrix3D (MSDN) - Représente un 4 x 4 de la matrice utilisée pour les transformations dans l'espace 3-D
Prendre un coup d'oeil ici pour un tutoriel: La construction d'un Moteur 3D
Essentiellement, les matrices sont construites pour X, Y et Z des rotations et puis, vous pouvez multiplier les rotations dans n'importe quel ordre.
S'il est vrai que MatrixX * MatrixY n'est pas nécessairement égal MatrixY * MatrixX, c'est à l'OP pour décider de l'ordre de la multiplication.
Vous êtes confus 2 différents Matrix3D. Même si vous faites référence à la MSDN, cette Matrice 3D n'ont pas un "_matrix" membre.
OriginalL'auteur NakedBrunch
Fonction
rotateAroundAxis()
tourne autour d'un axe quelconque en 3D. C'est ma solution pour la rotation en 3D à l'aide de la géométrie analytique et de programmation pour modéliser le processus. Le code est en JavaScript.OriginalL'auteur Jan Kokes