3D en rotation avec l'Axe & Angle de

Je sais rotation 3D est bien documenté sur tant et de nombreux autres sites, mais malgré la lecture d'innombrables explications, je n'ai toujours pas compris où je vais mal. Mon parcours est dans l'art et le design, pas de mathématiques et de programmation, et je ne suis jamais vraiment certain si mon angle d'attaque (no pun intended) est la bonne. Plutôt que de coller un patchwork de ma lamentable code, je suis, y compris une image de décrire mon problème. Ce que j'aimerais vraiment est une étape-par-étape libellé répartition de la manière de le résoudre. Le Pseudo-code est utile, mais je vais apprendre plus si quelqu'un va visez juste moi dans la bonne direction ou de souligner les pièges les plus courants.


3D en rotation avec l'Axe & Angle de

Rouge = Axe Des X, Vert = Axe Des Y, Bleu = Z-Axe

Magenta vecteurs = origine --> certaines valeurs de X,Y,Z point de

Magenta cube = moyenne des points de terminaison des deux magenta vecteurs (est-il un meilleur nom pour cette?)

Blanc vecteur = produit croisé de deux magenta vecteurs (étendu pour l'affichage, le vecteur est normalisée)

Cyan objet cube = rotation échouer


J'ai déjà utilisé Away3D et Papervision; dans ces bibliothèques, en appliquant des angles d'Euler d'un objet rotationX, rotationY, ou rotationZ pivoter l'objet sur place, comme si il est à l'origine, indépendamment de sa position réelle. Avec Three.js ce n'est pas le cas. La modification de la rotation d'un objet.x et de rotation.y des propriétés produit un effet bizarre où l'objet apparemment penche un peu sur l'axe des Z. Encore plus déroutant, c'est que cela se produit lorsque l'objet se repose à l'origine. J'ai pensé que peut-être en utilisant les Quaternions-->de la Matrice ou de l'Axe et l'Angle-->fonctions de la Matrice, il permettrait de résoudre mon problème, mais pas de dés. Il semble qu'il est un concept de base, je ne suis pas arriver.

De toute façon, ce que je voudrais faire est d'orienter le cube de la croix du produit vectoriel (blanc), de sorte que le dessus du cube est face à la direction de ce vecteur. Ensuite j'aimerais faire tourner le cube sur le même axe. L'image que j'ai jointe montre le résultat de plus d'heures que je tiens à admettre, en essayant de parvenir à ce résultat. Mon code vaguement ressemble à ceci:

axis = Vector3.cross(a, b)
axis.normalize()
angle = 45 * TO_RADIANS;
quat = AxisAngle2Quaternion(axis, angle)
rot = Quaternion2Matrix(quat)
cube.matrix = rot

Merci d'avance,

Casey


Edit: Démarrage d'une prime

Peut-être que je suis l'incompréhension comment c'est censé fonctionner. Voici une autre image:

3D en rotation avec l'Axe & Angle de

Je suis incorrect de penser que cette magenta vecteur est l'axe, et l'orange flèches indiquent la rotation autour de cet axe en fonction de l'angle? D'une façon ou d'une autre, je veux orienter le cyan cube basé sur certains vecteur directionnel et la faire tourner. Ce que je fais mal!?

Personne ne réagit, mais en fait, je pense que votre question est l'un des meilleurs formulé ceux que j'ai vu jusqu'ici. Peut-être juste que personne ne sait? Je serais également curieux de voir la réponse ici.
Peut-être qu'ils se débarrassent de la Three.js aspect... je m'attendais à ce joli problème de base
J'ai été en mesure de se rapprocher avec la "Utils3D.pointTowards()" méthode de Flash: help.adobe.com/en_US/AS3LCR/Flash_10.0/flash/geom/Utils3D.html Mais je ne sais pas comment appliquer la rotation autour de l'axe et je ne trouve pas de comparable OSS fonctions
J'ai posté une question similaire, et c'est peut-être un peu moins élaboré. Oui, vous avez raison de dire que l'magenta vecteur unitaire est de l'axe de rotation, et oui, c'est très difficile. Je ne sais rien à propos de Three.js mais je suis curieux de savoir à ce sujet. Au lieu de cela, j'ai tenté d'écrire un projet moi-même. J'ai trouvé que la recherche de ce qui est connu comme une quaternion a été très utile, encore douloureux. Aussi, essayez de Googler rotating around arbitrary axis pour un certain nombre de réponses, elles m'ont aidé.
Ou encore, découvrez ce, il m'a aidé le plus.

OriginalL'auteur Casey | 2010-09-28