diff --git a/linea/linea/Ligne.java b/linea/linea/Ligne.java index 654dab4..be09475 100644 --- a/linea/linea/Ligne.java +++ b/linea/linea/Ligne.java @@ -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 - // Principe: On a le rayon du cercle qui ne varie pas ainsi que le segment courant - // On compare la distance centre cercle-segCourant à celle du rayon - // Si c'est supérieur, la ligne n'est pas dans le cercle - // Sinon la ligne est dans le cercle + // Principe: On a le rayon du cercle qui ne varie pas + // On parcourt tous les points du segment courant + // Et on calcule la distance entre chacun de ces points et le centre du 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 // 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 @@ -134,15 +135,21 @@ public class Ligne extends ObjetGraphique{// Hérite de la classe ObjetGraphique if (this.SegCourant == null) { return false; } - - double yCercle = c.getY(); - double distance = Math.sqrt(Math.pow((xCercle - this.SegCourant.x), 2) + Math.pow((yCercle - this.SegCourant.y), 2)); - if (distance <= c.getRayon()) { - this.SegCourant.setCouleur(Color.GREEN); - dansCercle = true; - } else { - this.SegCourant.setCouleur(Color.RED); - dansCercle = false; + + for(int i = 0; i <= 50; i++){ + 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()){ + // 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); + 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; }