modif 1: Collision cercle-ligne

This commit is contained in:
2026-02-10 15:23:17 +01:00
parent 570adb8ad3
commit ff992b1d50

View File

@@ -99,10 +99,11 @@ 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
@@ -134,15 +135,21 @@ public class Ligne extends ObjetGraphique{// Hérite de la classe ObjetGraphique
if (this.SegCourant == null) { if (this.SegCourant == null) {
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;
if (distance <= c.getRayon()) { double yPoint = this.SegCourant.y + (i/50.0)*this.SegCourant.yLong;
this.SegCourant.setCouleur(Color.GREEN); double distance = Math.sqrt(Math.pow((xCercle - xPoint), 2) + Math.pow((yCercle - yPoint), 2));
dansCercle = true; if(distance <= c.getRayon()){
} else { // Le point i du segment courant est dans le cercle, on peut continuer à vérifier les autres points du segment
this.SegCourant.setCouleur(Color.RED); this.SegCourant.setCouleur(Color.GREEN);
dansCercle = false; dansCercle = true;
}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);
dansCercle = false;
break;
}
} }
return dansCercle; return dansCercle;
} }