Compare commits

...

2 Commits

Author SHA1 Message Date
ff992b1d50 modif 1: Collision cercle-ligne 2026-02-10 15:23:17 +01:00
570adb8ad3 Add MAJ 2026-02-10 14:14:30 +01:00

View File

@@ -97,12 +97,13 @@ public class Ligne extends ObjetGraphique{// Hérite de la classe ObjetGraphique
} }
//-------------------------------------------------------------------------------- //---------------------------------------------------------------------------------------
// Méthode permettant de vérifier si la ligne est à l'intérieur du cercle // Méthode permettant de vérifier si la ligne est à l'intérieur du cercle
// Principe: On a le rayon du cercle qui ne varie pas ainsi que le segment courant // Principe: On a le rayon du cercle qui ne varie pas
// On compare la distance centre cercle-segCourant à celle du rayon // On parcourt tous les points du segment courant
// Si c'est supérieur, la ligne n'est pas dans le cercle // Et on calcule la distance entre chacun de ces points et le centre du cercle
// Sinon la ligne est dans le cercle // Si la distance est supérieure au rayon du cercle, alors le point n'est pas dans le cercle
// Sinon le segment courant est dans le cercle
// Remarque: On a définit la position du cercle grâce à son centre // Remarque: On a définit la position du cercle grâce à son centre
// Autrement dit, les coordonnées du centre du cercle sont la position du cercle // Autrement dit, les coordonnées du centre du cercle sont la position du cercle
// Raison pour laquelle au début la ligne est toujours dans le cercle // Raison pour laquelle au début la ligne est toujours dans le cercle
@@ -110,7 +111,7 @@ public class Ligne extends ObjetGraphique{// Hérite de la classe ObjetGraphique
// Formule de la distance : d = sqrt( (x2-x1)^2 + (y2-y1)^2 ) // Formule de la distance : d = sqrt( (x2-x1)^2 + (y2-y1)^2 )
// !!! Attention: il faut vérifier si le segment courant existe avant de faire les calculs // !!! Attention: il faut vérifier si le segment courant existe avant de faire les calculs
// Sinon l'écran rique de se figer à cause d'un nullPointerException // Sinon l'écran rique de se figer à cause d'un nullPointerException
//-------------------------------------------------------------------------------- //----------------------------------------------------------------------------------------
public boolean estDansCercle(Cercle c){ public boolean estDansCercle(Cercle c){
boolean dansCercle = false; boolean dansCercle = false;
// Si aucun segment courant n'a encore été déterminé (peut arriver // Si aucun segment courant n'a encore été déterminé (peut arriver
@@ -135,14 +136,20 @@ public class Ligne extends ObjetGraphique{// Hérite de la classe ObjetGraphique
return false; return false;
} }
double yCercle = c.getY(); for(int i = 0; i <= 50; i++){
double distance = Math.sqrt(Math.pow((xCercle - this.SegCourant.x), 2) + Math.pow((yCercle - this.SegCourant.y), 2)); double xPoint = this.SegCourant.x + (i/50.0)*this.SegCourant.xLong;
double yPoint = this.SegCourant.y + (i/50.0)*this.SegCourant.yLong;
double distance = Math.sqrt(Math.pow((xCercle - xPoint), 2) + Math.pow((yCercle - yPoint), 2));
if(distance <= c.getRayon()){ if(distance <= c.getRayon()){
// Le point i du segment courant est dans le cercle, on peut continuer à vérifier les autres points du segment
this.SegCourant.setCouleur(Color.GREEN); this.SegCourant.setCouleur(Color.GREEN);
dansCercle = true; dansCercle = true;
}else{ }else{
// On peut s'arrêter dès qu'on trouve un point hors du cercle, car le segment courant n'est plus dans le cercle
this.SegCourant.setCouleur(Color.RED); this.SegCourant.setCouleur(Color.RED);
dansCercle = false; dansCercle = false;
break;
}
} }
return dansCercle; return dansCercle;
} }