modif 1: Collision cercle-ligne
This commit is contained in:
@@ -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
|
||||||
@@ -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;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user