J'essaye d'utiliser Java3D pour faire tourner un vecteur. Mon but est de créer une transformation qui rendra le vecteur parallèle à l'axe des ordonnées. Pour ce faire, j'ai calculé l'angle entre le vecteur original et un vecteur identique sauf qu'il a une valeur z de 0 (original x, original y, 0 pour la valeur z). J'ai ensuite fait la même chose pour l'axe des ordonnées (original x, 0 pour y-value, original z). J'ai ensuite utilisé chaque angle pour créer deux objets Transform3D, les multiplier ensemble et appliquer au vecteur. Mon code est le suivant:Rotation de vecteur en utilisant Java 3D
Transform3D yRotation = new Transform3D();
Transform3D zRotation = new Transform3D();
//create new normal vector
Vector3f normPoint = new Vector3f (normal.getX(), normal.getY(), normal.getZ());
//****Z rotation methods*****
Vector3f newNormPointZ = new Vector3f(normal.getX(), normal.getY(),0.0F);
float zAngle = normPoint.angle(newNormPointZ);
zRotation.rotZ(zAngle);
//****Y rotation methods*****
Vector3f newNormPointY = new Vector3f(normal.getX(),0.0F, normal.getZ());
float yAngle = normPoint.angle(newNormPointY);
yRotation.rotY(yAngle);
//combine the two rotations
yRotation.mul(zRotation);
System.out.println("before trans normal = " +normPoint.x + ", "+normPoint.y+", "+normPoint.z);
//PRINT STATEMENT RETURNS: before trans normal = 0.069842085, 0.99316376, 0.09353002
//perform transform
yRotation.transform(normPoint);
System.out.println("normal trans = " +normPoint.x + ", "+normPoint.y+", "+normPoint.z);
//PRINT STATEMENT RETURNS: normal trans = 0.09016449, 0.99534255, 0.03411238
J'espérais la transformation produirait x et les valeurs z ou très proche de 0. Alors que la logique est logique pour moi, je manque évidemment quelque chose ..
Merci. Mon objectif global est de faire tourner un nuage de points entier de sorte que le sol ait des valeurs très proches ou égales à 0. J'essaie de générer un Transform3D qui fera tourner le vecteur (normal au sol) parallèlement à l'axe y et ensuite utiliser ce même Transform3D pour faire pivoter chaque point dans le nuage de points. Après la rotation, j'espère que tous les points appartenant au sol auront une valeur très proche de zéro. Est-ce que cela ressemble à une approche décente? – RDL
L'emplacement de chaque point dépend de l'axe de rotation. Si je me souviens bien, les fonctions RotX/Y/Z tournent à l'aide de la matrice modelview de chaque objet, donc la rotation d'un point qui a été déplacé vers (a, b, c) fera que le point se trouvera toujours dans (a, b, c), mais avec une direction normale différente. [AxisAngle4f] (http://download.oracle.com/docs/cd/E17802_01/j2se/javase/technologies/desktop/java3d/forDevelopers/J3D_1_3_API/j3dapi/javax/vecmath/AxisAngle4f.html) semble être ce que tu veux. –