Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2917 connectés 

  FORUM HardWare.fr
  Programmation
  Java

  java 3D

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

java 3D

n°736022
pitiana
Posté le 24-05-2004 à 13:59:14  profilanswer
 

je n'ai pas de réponse.......
quelqu'un aurait-il une idée?
 
merci d'avance

mood
Publicité
Posté le 24-05-2004 à 13:59:14  profilanswer
 

n°736024
gfive
Posté le 24-05-2004 à 14:00:46  profilanswer
 

là, y'a question.

n°736026
Ace17
Posté le 24-05-2004 à 14:01:15  profilanswer
 

Une idée pour quoi?

n°736122
pitiana
Posté le 24-05-2004 à 14:33:58  profilanswer
 

lol pour le sujet sur java 3d que j'ai écrit
 
Bonjour,  
 
sujet  java3D  
 
je ne sais pas trop comment fonctionne le forum car je n'y suis jamais allée. je voudrais savoir comment placer un cylindre 3D dans l'espace 3D. Lorsque je crée un cylindre celui ci se place en (0,0,0); or moi je dispose d'un fichier ou je connais 2 points du cylindre donc je connais son vecteur directeur. J'ai trouvé la translation pour passer de un à l'autre mais pas les angles de rotations. comment faire? sinon ne peut on pas créer un cylindre en 3D a partir de 2 points et pas que du rayon je n ai pas trouvé.  
Ou sinon existe t 'il une fonction qui permettent d'orienter le cylindre en fontion d'un vecteur directeur
 
merci
 
merci

n°736475
pascal34
one point !
Posté le 24-05-2004 à 16:57:09  profilanswer
 

Soit un peu plus clair(e).
Les deux points dont tu parles sont sur l'axe du cylindre ?

n°737159
pitiana
Posté le 25-05-2004 à 09:23:44  profilanswer
 

oui ce sont les centres de chaque cercle en haut et en bas du cylindre. merci

n°737181
pascal34
one point !
Posté le 25-05-2004 à 09:34:42  profilanswer
 

Normalement, les transformations se font d'un repère à l'autre. Tu calcule la matrice de passage des vecteurs de la nouvelle base en fonction de ceux de l'ancienne base.
Donc il faudrait pouvoir attacher une base à ton cylindre.
Mais compte tenu de sa symétrie, on doit pouvoir simplifié la matrice de passage.

n°737389
pitiana
Posté le 25-05-2004 à 11:14:55  profilanswer
 

c est avec les angles d'euler?

n°737753
pascal34
one point !
Posté le 25-05-2004 à 14:30:49  profilanswer
 

pitiana a écrit :

c est avec les angles d'euler?


 
Si tu veux. Mes souvenirs de mécanique du solide sont loins  :cry:  
 
 

n°738285
Ace17
Posté le 25-05-2004 à 18:33:52  profilanswer
 

pascal34 a écrit :

Mais compte tenu de sa symétrie, on doit pouvoir simplifié la matrice de passage.


Ben non... ca n'a rien a voir avec la forme de l'objet que tu veux transformer... La matrice de passage, c'est les vecteurs de la nouvelle base exprimés dans l'ancienne base, c'est tout. Apres, que tu veuilles transformer un cube, un cylindre, une boule.... tout ca n'est qu'un amas de points au final.

mood
Publicité
Posté le 25-05-2004 à 18:33:52  profilanswer
 

n°738447
pascal34
one point !
Posté le 25-05-2004 à 19:51:10  profilanswer
 

Ace17 a écrit :

Ben non... ca n'a rien a voir avec la forme de l'objet que tu veux transformer... La matrice de passage, c'est les vecteurs de la nouvelle base exprimés dans l'ancienne base, c'est tout. Apres, que tu veuilles transformer un cube, un cylindre, une boule.... tout ca n'est qu'un amas de points au final.


 
Oui, mais si tu tiens compte de la symétrie du cylindre, la transformation doit pouvoir être simplifiée.
 
Par exemple, une rotation autour de l'axe du cylindre le laisse inchangé. donc si on associe un repère local au cylindre avec l'axe z suivant l'axe du cylindre, je pense que la matrice de passage doit être plus simple qu'une matrice de passage générique.
 

n°738511
Sylfurd
UUUURUTORAMAN §§
Posté le 25-05-2004 à 20:41:03  profilanswer
 

faut utiliser les produit scalaire, j'ai un probleme dessus aussi mais ça doit marcher:
 
en fait il te faut l'angle entre 2 vecteurs u(x, y, z) et v(x', y', z')
 
le produit scalaire u.v = x*x' + y*y' + z*z'
mais aussi u.v = ||u|| * ||v|| * cos(a)
 
il suffit de poser cos(a) = (x*x' + y*y' + z*z') / ||u|| * ||v||
 
Et de prendre l'acos de cos(a) pour avoir a...
Le probleme que j'ai est qu'il existe 2 a tel que a = acos(x) et là pour trouver le bon je sais pas trop...
 
l'axe de rotation entre les 2 vecteurs est simplement le produit vectoriel de u et v (par contre je sais pas si la normalisation du vecteur est necessaire ... [:spamafote])


Message édité par Sylfurd le 25-05-2004 à 23:11:59
n°738532
gm_superst​ar
Appelez-moi Super
Posté le 25-05-2004 à 21:15:43  profilanswer
 

pitiana a écrit :

je n'ai pas de réponse.......


Pour info quand c'est comme ça on ne crée pas de nouveaux topics, on remonte l'ancien :o


---------------
Incongru : une FAQ abandonnée sur les Standards du Web - FAQ périmée de blabla@Prog
n°738606
Ace17
Posté le 25-05-2004 à 22:16:36  profilanswer
 

Je pense que c'est inutile de simplifier la matrice de passage, dans la mesure ou ca prendra du temps, alors que le temps pris par le calcul des points sera le meme ( le processeur ne verra pas la différence entre une matrice simplifiée ou pas ... )
 
Sylfurd >> ils sont pas un peu faux tes calculs?
cos (a) = u.v / (||u||.||v||) plutot...

n°738618
Ace17
Posté le 25-05-2004 à 22:21:15  profilanswer
 

Pour ton probleme, pitiana :  
Soient u ton vecteur directeur de ton cylindre, v le vecteur selon lequel tu souhaite l'orienter.
Projete les deux sur le plan xOy par exemple, tu obtiens u' et v' donc, tu peux en déduire la rotation 2d d'axe z qui transforme u' en v'.  
Tu projetes u' et v' sur le plan xOz, tu obtiens u'' et v'', tu peux en déduire la rotation 2d d'axe y qui transforme u'' en v''.
Tu n'a plus qu'a composer les deux rotations... et tu as transformé ton cylindre

n°738698
Sylfurd
UUUURUTORAMAN §§
Posté le 25-05-2004 à 23:11:24  profilanswer
 

Ace17 a écrit :

Je pense que c'est inutile de simplifier la matrice de passage, dans la mesure ou ca prendra du temps, alors que le temps pris par le calcul des points sera le meme ( le processeur ne verra pas la différence entre une matrice simplifiée ou pas ... )
 
Sylfurd >> ils sont pas un peu faux tes calculs?
cos (a) = u.v / (||u||.||v||) plutot...


 
en effet j'ai pas fait gaffe j'edit :jap:

n°739305
pascal34
one point !
Posté le 26-05-2004 à 11:04:17  profilanswer
 

Ace17 a écrit :

Pour ton probleme, pitiana :  
Soient u ton vecteur directeur de ton cylindre, v le vecteur selon lequel tu souhaite l'orienter.
Projete les deux sur le plan xOy par exemple, tu obtiens u' et v' donc, tu peux en déduire la rotation 2d d'axe z qui transforme u' en v'.  
Tu projetes u' et v' sur le plan xOz, tu obtiens u'' et v'', tu peux en déduire la rotation 2d d'axe y qui transforme u'' en v''.
Tu n'a plus qu'a composer les deux rotations... et tu as transformé ton cylindre


 
Tout à fait, mais faut faire gaffe à l'ordre de composition des rotations.
Y'a des exemples avec java3D de composition de rotations pour un cube.

n°742929
pitiana
Posté le 28-05-2004 à 11:57:39  profilanswer
 

merci a tout le monde pour vos réponses. merci a Ace 17 pour ses expliquations plus que utiles! merci

n°742947
pitiana
Posté le 28-05-2004 à 12:04:34  profilanswer
 

j'ai une nouvelle question pour vous maintenant que j'ai réussi à orienté le cylindre. en fait quand j'utilise la fonction angle pour trouver les angles de rotation (cela me donne l'angle entre 2 vecteurs) j'obtiens toujours un angle positif dans [0;pi] alors que moi je veux l'angle trigonométrique sinon ma rotation est des fois en sens inverse. Y a t il une fonction qui donne l'angle trigonométrique donc entre[-pi;pi] entre 2 vecteurs.
 
merci

n°743307
pascal34
one point !
Posté le 28-05-2004 à 13:36:54  profilanswer
 

C'est quoi cette fonction angle ?

n°743429
pitiana
Posté le 28-05-2004 à 14:22:11  profilanswer
 

float angle(Vector3f v1)  
          Returns the angle in radians between this vector and the vector parameter; the return value is constrained to the range [0,PI].

n°743696
pascal34
one point !
Posté le 28-05-2004 à 16:02:30  profilanswer
 

Fais-le toi-même.
A partir du produit scalaire, tu retrouves le cosinus.
A partir du produit vectoriel, tu retrouves le sinus.
 
En fonction de leurs signes respectifs, tu retrouves le quadrant du cercle trigonométrique dans lequel se situe l'angle. Ainsi tu peux apporter une correction à l'angle founi par cette méthode

n°743820
Ace17
Posté le 28-05-2004 à 16:39:59  profilanswer
 

En fait, en poursuivant l'étude théorique on pourrait éviter de passer par les angles...

n°743949
Ace17
Posté le 28-05-2004 à 17:36:22  profilanswer
 

Ca y est, j'ai trouvé.  
Tu prends ton espace a 3 dimensions.
Tu as :
u : le vecteur directeur de ton cylindre non transformé,
v : le vecteur selon lequel tu veux l'orienter
 
(Au passage, tous les vecteurs utilisés ici sont normés)
 
Tu veux donc la matrice M de la rotation qui transforme u en v (on peut toujours tourner autour de v apres, mais ca ne nous gene pas, puisqu'il s'agit d'un cylindre ).
 
On peut des le départ déterminer l'axe de la rotation : il s'agit de la droite de vecteur directeur n = u ^ v. ( produit vectoriel ).  
 
On peut trouver une base de l'espace en faisant n ^ u qui nous donne u'.
Bu = (u, u', n) est donc une base orthonormée directe de l'espace.
 
De meme, on peut aussi trouver une base de l'espace en faisant n ^ v qui nous donne v'.
Bv = (v, v', n) est donc une base orthonormée directe de l'espace.
 
En fait, la rotation qu'on cherche a faire, c'est la matrice de passage de Bv a Bu.
 
On exprime v et v' dans la base Bu ( par projection sur les axes ).

Code :
  1. v  = (v .u).u + (v .u').u'
  2. v' = (v'.u).u + (v'.u').u'


On a donc notre matrice :

Code :
  1. | v .u   v .u'  0 |
  2. | v'.u   v'.u'  0 |
  3. |   0      0    1 |


 
Donc tout ca pour dire que dans le cas ou les rotations a faire sont suivant un des vecteurs de ta base canonique (donc quand n ca va etre x, y ou z) tu peux t'épargner d'avoir affaire à des angles. Et c'est précisément le cas! ( voir mon post plus haut ) Tu n'as donc qu'a appliquer deux fois cette méthode et composer les rotations pour avoir la rotation finale


Message édité par Ace17 le 28-05-2004 à 17:40:18
n°744005
Ace17
Posté le 28-05-2004 à 18:20:12  profilanswer
 

Pour ceux qui n'auraient pas envie de se farcir toutes la théorie, voici comment calculer la matrice de rotation qui transforme u en v.
On reprend les notations/conventions du post précédent, soit :  
u et v sont normés, n = u ^ v. On définit u' = n ^ u et v' = n ^ v.
 
 
La matrice M de rotation est :
M = AB
avec


A :
|vx  vx'  nx|
|vy  vy'  ny|
|vz  vz'  nz|
 
B:
|ux  uy  uz |
|ux' uy' uz'|
|nx  ny  nz |
 


Message édité par Ace17 le 28-05-2004 à 18:22:10
n°744052
pascal34
one point !
Posté le 28-05-2004 à 19:24:08  profilanswer
 

Que de souvenirs !!!

n°746540
pitiana
Posté le 31-05-2004 à 19:33:30  profilanswer
 

merci je v

n°746541
pitiana
Posté le 31-05-2004 à 19:33:51  profilanswer
 

merci je l'ai imprimé je vais y méditer...

n°746542
kadreg
profil: Utilisateur
Posté le 31-05-2004 à 19:33:52  profilanswer
 


 
ais faire caca ?


---------------
brisez les rêves des gens, il en restera toujours quelque chose...  -- laissez moi troller sur discu !
n°746615
Ace17
Posté le 31-05-2004 à 20:21:41  profilanswer
 

pitiana a écrit :

merci je l'ai imprimé je vais y méditer...


Veux tu que je te rédige l'étude théorique? Ca me fera réviser...

n°746999
pitiana
Posté le 01-06-2004 à 09:29:22  profilanswer
 

et bien en fait je suis parti sur les angles de rotations et je vais trouver les angles graces au vecteur projeté de mon vecteur directeur sur le plan oij ainsi que du perpendiculaire de ce projeté dans le plan oij ect..je n utiliserais pas la fonction angle et pour le signe de l'angle je vais regarder le cosinus et le sinus ca me donnera le signe
 
c est pas comme ca?
 
 
merci en tout cas c est très sympa

n°747065
pitiana
Posté le 01-06-2004 à 10:30:04  profilanswer
 

j'ai une autre question je veux trouver le singne du sinus entre 2 angles c'est à dire sin(alpha) sera entre (-1,0) ou (0,1) comme ca j aurais un angle soit dans [0 pi] ou [-pi 0]. j'ai essayé d'utiliser le produit scalaire cad  
sin(alpha)=norme(produit scalaire)/norme(u).norme(v)  
mais ca ne me donne qu un sinus positif comment faire ace 17?  ou les autres.
 
si quelqu un sait merci bcp

n°747834
Ace17
Posté le 01-06-2004 à 19:23:44  profilanswer
 

Elle est fausse ta formule...  
cos(alpha) = norme(u.v) / norme(u).norme(v)
et pas sin(alpha)

n°747849
Ace17
Posté le 01-06-2004 à 19:27:23  profilanswer
 

Mais je te conseille vraiment de ne PAS passer par les angles. Tout ce que tu risques c'est de finir avec une division par zero, et de t'embrouiller l'esprit avec les lignes trigo alors qu'on s'en passe tres bien ici!

n°1990906
JuFromPari​s
Posté le 06-05-2010 à 14:01:21  profilanswer
 

Bonjour,
 
Petit déterrage sympa pour mon premier post ici!
 
J'ai appliqué ces formules pour positionner des disques (Cylindre plat) perpendiculaires à des vecteurs, ca fonctionne pas trop mal sauf que j'ai l'impression que certains de ces disques subissent une modification de leur diamètre, bien que les méthodes getRadius() et getHeight() me renvoi les dimensions que j'ai affecté au cylindre.
 
C'est plus un souci au niveau de la rotation puisque l'apparence des cylindres est nickel lorsque j'applique uniquement la translation.
 
C'est comme si la perspective était respectée lors de l'affichage mais lorsque je me balade dans la scène, les cylindres éloignées au départ restent petit..
 
 
Qu'en pensez vous?  
Une rotation peut-elle modifier l'aspect visuel d'un shape?
J'ai l'impression que oui puisque lors d'une erreur sur ma matrice de rotation, mes disques avaient pris une forme ovale..
 
Merci de votre aide.


Message édité par JuFromParis le 06-05-2010 à 14:07:47
mood
Publicité
Posté le   profilanswer
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Java

  java 3D

 

Sujets relatifs
[java] [Débutante]JinternalFrame et JOptionPanelancement automatique d'un prog java
java 3D et les transformations[java] Regex : je ne m'en sors pas :(
[Java] Problème pour convertir un string en entier [resolu]Upload de photos en java
[java] ouverture d'une boite de dialogue[java] généalogie
[Java] Récupérer un fichier sur un site et l'enregistrer localement ?[Java] text qu'on veut pas voir : remplacer la saisie par astérisques?
Plus de sujets relatifs à : java 3D


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR