rotation dans l'espace (fonction java)

rotation dans l'espace (fonction java) - Java - Programmation

Marsh Posté le 05-03-2004 à 18:55:42    

Salut, je fais appel a votre savoir pour m'aider dans la résolutino d'un problème.
Savez vous si il existe en java une fonction qui permet de transformer les coordonnées d'un point en 3 dimensions par rapport a un angle téta, et un axe quelconque (le quelconque est très important), autrament faire une rotation par rapport a un axe quelconque.
 
Si y a pas de fonctions, connaissez vous la formule de la matrice de transformation (c plutot un truc de trigo ça, mais bon, g pas réussi a la trouver en entier).
 
Merci

Reply

Marsh Posté le 05-03-2004 à 18:55:42   

Reply

Marsh Posté le 05-03-2004 à 19:00:29    

Pour faire cette rotation, tu peux utiliser les quaternions. C'est pas très compliqué en fait (Je vais rechercher des infos et je reviens poster) !
 
Sinon je ne connais pas Java ! :D

Reply

Marsh Posté le 05-03-2004 à 19:31:56    

hhmm
oula, bon, merci, v voi ça.
Jamais entendu parler en tout cas

Reply

Marsh Posté le 05-03-2004 à 19:33:39    

Alors voilà (c'est du javascrip) !
 
Donc premier il faut initialiser ton quaternion et pour cela tu le fais à partir de l'angle a et de l'axe représenté par x, y et z.
 

function rq(_q,a,x,y,z)
{
 var sin_a = Math.sin(a/2);
 var cos_a = Math.cos(a/2);
 
 _q.x = x * sin_a;
 _q.y = y * sin_a;
 _q.z = z * sin_a;
 _q.w = cos_a;
 
 nq(_q);
}


 
Il faut ensuite le normaliser (appel à la fonction nq).
 

function nq(q_)
{
 var l=Math.sqrt(q_.w*q_.w + q_.x*q_.x + q_.y*q_.y + q_.z*q_.z);
 l=1/l;
 q_.w=q_.w*l;
 q_.x=q_.x*l;
 q_.y=q_.y*l;
 q_.z=q_.z*l;
}


 
Et il reste à creer la matrice de transformation :

function qm(mat,q)
{
 var xx = q.x * q.x;
 var xy = q.x * q.y;
 var xz = q.x * q.z;
 var xw = q.x * q.w;
 
 var yy = q.y * q.y;
 var yz = q.y * q.z;
 var yw = q.y * q.w;
 
 var zz = q.z * q.z;
 var zw = q.z * q.w;
 
 mat[0]  = 1 - 2 * ( yy + zz );
 mat[1]  =     2 * ( xy - zw );
 mat[2]  =     2 * ( xz + yw );
 
 mat[4]  =     2 * ( xy + zw );
 mat[5]  = 1 - 2 * ( xx + zz );
 mat[6]  =     2 * ( yz - xw );
 
 mat[8]  =     2 * ( xz - yw );
 mat[9]  =     2 * ( yz + xw );
 mat[10] = 1 - 2 * ( xx + yy );
 
 mat[3]  = mat[7] = mat[11] = mat[12] = mat[13] = mat[14] = 0;
 mat[15] = 1;
}


 
Et voilà tu a une jolie matrice de transformation !
Donc c'est une matrice 4x4 en notation française ! :D


Message édité par darkoli le 05-03-2004 à 19:34:48
Reply

Marsh Posté le 05-03-2004 à 19:47:20    

rolalalala
Bon, ca doit marcher :)
Je vais potasser ça ce week end, suis crevé la.
merci en tout cas :D
 
juste un der truc, g pas trouvé de quaternion dans la doc java.
Tu sais pas dans kelle bibli je peux trouver les methodes d'initialisation de quaternions ou de normalisation ??

Reply

Marsh Posté le 05-03-2004 à 21:00:11    

John_Hide a écrit :

rolalalala
Bon, ca doit marcher :)
Je vais potasser ça ce week end, suis crevé la.
merci en tout cas :D
 
juste un der truc, g pas trouvé de quaternion dans la doc java.
Tu sais pas dans kelle bibli je peux trouver les methodes d'initialisation de quaternions ou de normalisation ??


Absoluement pas, je n'ai jamais fait de java ! :D

Reply

Marsh Posté le 05-03-2004 à 21:03:19    

oki ...
bon, bon, bon
v me taper un bouquin de méca du solide je sens ...

Reply

Marsh Posté le 11-05-2004 à 20:23:34    

Salut,
 
 
je t'ecris pour que tu me sauves la vie j'ai vu ta question concernant la rotation 3D sur le forum hardware.fr; et je suis a la recherche d'exactement la meme chose: permettre la rotation 3D de points par rapport a un axe quelconque en JAVA; donc si tu pouvais me transmettre ton savoir tu m'enleverais une grosse epine du pied d'autant que je suis en perdition depuis un moment a cause de ce probleme, faut dire que la geo c'est pas mon truc!
 
P.S.: excuse les accents je suis au states!

Reply

Marsh Posté le 12-05-2004 à 11:09:32    

karua54 a écrit :

Salut,
 
 
je t'ecris pour que tu me sauves la vie j'ai vu ta question concernant la rotation 3D sur le forum hardware.fr; et je suis a la recherche d'exactement la meme chose: permettre la rotation 3D de points par rapport a un axe quelconque en JAVA; donc si tu pouvais me transmettre ton savoir tu m'enleverais une grosse epine du pied d'autant que je suis en perdition depuis un moment a cause de ce probleme, faut dire que la geo c'est pas mon truc!
 
P.S.: excuse les accents je suis au states!


 
http://membres.lycos.fr/villeminge [...] agQuat.htm

Reply

Marsh Posté le 24-05-2004 à 15:50:01    

salut pascal,
 
j'avais ^le meme probleme que toi et j'ai peut etre trouvé un truc : public final void setRotation(AxisAngle4d a1)
je crois que ca a macrhé pour moi. et ca :AxisAngle4d(Vector3d axis, double angle)  
          Constructs and initializes an AxisAngle4d from the specified axis and angle.
 
voila

Reply

Marsh Posté le 24-05-2004 à 15:50:01   

Reply

Marsh Posté le 24-05-2004 à 16:41:59    

pitiana a écrit :

salut pascal,
 
j'avais ^le meme probleme que toi et j'ai peut etre trouvé un truc : public final void setRotation(AxisAngle4d a1)
je crois que ca a macrhé pour moi. et ca :AxisAngle4d(Vector3d axis, double angle)  
          Constructs and initializes an AxisAngle4d from the specified axis and angle.
 
voila


 
C'est pas dans le JDK ça  :heink:  
Peut-être Java3D ??

Reply

Marsh Posté le 25-05-2004 à 09:25:12    

ben oui c ets dans java 3D mais c 'étét pas une question de java 3d que tu posais?  ciao

Reply

Marsh Posté le 25-05-2004 à 09:31:31    

pitiana a écrit :

ben oui c ets dans java 3D mais c 'étét pas une question de java 3d que tu posais?  ciao


 
Au départ, c'est pas moi qui ai créé le sujet  :D  
 
Ceci dit, ça me fait penser que dans Java3D il y a une partie de l'api (javax.vecmath) qui est indépendant du moteur 3D. C'est un package de calcul matriciel 2D/3D qui est dans un jar à part. Peut-être qu'on a le droit de l'utiliser hors Java3D.

Reply

Marsh Posté le 25-05-2004 à 11:16:24    

alors la j'en sais rien moi j'ai installé java 3d donc... lol   bon courage

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed