cs_HELPY
Messages postés1Date d'inscriptionvendredi 22 juin 2007StatutMembreDernière intervention22 juin 2007
-
22 juin 2007 à 11:57
CoreBreaker
Messages postés540Date d'inscriptiondimanche 23 mars 2003StatutMembreDernière intervention 5 octobre 2007
-
5 oct. 2007 à 22:30
Bonjour,
Je recherche une classe java ayant pour parametres d'entrée 2 segments ( définis chacuns par 2 points dans l'espace ( xA,yA,zA) ( xB,yB,zB) ) et ayant des méthodes pour connaitre:
- si ces segments s'intersectent... et si oui le point d'intersection
- si ces segments sont concourants... et si oui le ou les points extremes concourants.
Twinuts
Messages postés5375Date d'inscriptiondimanche 4 mai 2003StatutModérateurDernière intervention14 juin 2023111 22 juin 2007 à 12:55
Salut,
tu as essayé avec les classes Polygon (voir autre selon le besoin regarde les objet qui implémente Shape) et Area (qui permet de faire quelques manip de plus sur les Shape (Polygon l'implémente)?
------------------------------------
"On n'est pas au resto : ici on ne fait pas dans les plats tout cuits ..."
cs_laurent1024
Messages postés987Date d'inscriptionmardi 31 mai 2005StatutMembreDernière intervention30 août 201225 22 juin 2007 à 13:34
Comme tu travaille dans l'espace, il faut tout d'abord que tu regardes si les 4 points sont coplanaire. Si c'est le cas, avec des changemnt de repere tu peux te mettre dans le cas d'un intersection de deux segments dans un espace 2D
++
eplanet
Messages postés112Date d'inscriptiondimanche 6 juin 2004StatutMembreDernière intervention19 septembre 2007 22 juin 2007 à 16:00
Pour trouver si les points sont coplanaires :
- tu choisis l'une des extrémité comme centre du repère. Tu disposes donc de trois vecteurs par rapport à ce point : v1, v2, v3
- tu fais le produit vectoriel entre deux des vecteurs v1^v2
- tu calcules le produit scalaire du vecteur ainsi obtenu avec le troisième vecteur. (v1^v2).v3
--> Si le produit est nul, les points sont bien coplanaires.
Tu peux alors passer à la deuxième étape :
-tu dois trouver le vecteur le vecteur normal à v1 contenu dans le plan, il suffit de faire v1^(v2^v3) v4, (v2-v3)^(v1^v2) v5
-pour tester si il y a intersection, tu dois avoir : (v2.v4)*(v3.v4) <=0 et (v2.v5)*((v2-v1).v5) <=0
cs_GodConan
Messages postés2113Date d'inscriptionsamedi 8 novembre 2003StatutContributeurDernière intervention 6 octobre 201212 23 juin 2007 à 17:42
avec les class java2D je ne connais pas de soluces ;o) cependant ;o) avec les équation de tes droites ca pose pas de soucis normalement ;o) .... aller ;o) comme quoi faller pas jeter ses vieux bouquins de math ;o)...
// Les 2 segments sont alignés sur une meme droite
Point dir= e2.sub(e1);
double n= Math.sqrt(dir.norm());
Point u= new Point(dir.x / n, dir.y /n, dir.z / n);
double pos1= e2.scalProd(u);
double pos2= s.e1.scalProd(u);
double pos3= s.e2.scalProd(u);
boolean inv= false;
if( pos2 > pos3 )
{
double t= pos2;
pos2= pos3;
pos3= t;
inv= true;
}
if( (pos2 > pos1) || (pos3 < 0) )
return null;
if( (pos2 <= 0) && (pos3 >= pos1) )
return this;
if( (pos2 >= 0) && (pos3 <= pos1) )
return s;
if( pos2 < 0 )
return new Segment(e1, ( inv )?s.e1:s.e2);
else
return new Segment(( inv )?s.e2:s.e1, e2);
}
}