package linea; import java.awt.BasicStroke; import java.awt.Color; import java.awt.Graphics; import java.awt.Graphics2D; import java.util.ArrayList; public class Ligne extends ObjetGraphique{// Hérite de la classe ObjetGraphique // Ne pas oublier qu'il y a des propriétés et méthodes reçues par l'héritage //------------------------------------------------------------------------- // PROPRIETES //------------------------------------------------------------------------- // nb de Segments qui composent la ligne protected int nbSegments = 400; // position du cercle, pour déterminer quel est le segment courant protected double xCercle = 400; // à modifier // segment qui se trouve au niveau du cercle : on le mémorise pour accélérer les traitements protected Segment SegCourant; protected ArrayList listSegments = new ArrayList(); //------------------------------------------------------------------------- // METHODES //------------------------------------------------------------------------- //------------------------------------------------------------------------- // Constructeur de la classe //------------------------------------------------------------------------- public Ligne(){ // Valeurs initiales pour la position de la Ligne double x = 400; double y = 200; double xCourant = x; double yCourant = y; double dx = 0,dy=0; // Création de la liste de segments qui composent la ligne Segment s = new Segment(xCourant,yCourant,dx,dy); for (int i=0; i 600) { dy = -dy; } s = new Segment(x,y,dx,dy); s.setCouleur(new Color(0.2f,0.2f,0.2f)); x+=dx; y+=dy; listSegments.add(s); } } //------------------------------------------------------------------------- // Redéfinition de la méthode Afficher, spécifiquement pour la classe Ligne //------------------------------------------------------------------------- @Override public void Afficher(Graphics g){ // On définit l'épaisseur du trait Graphics2D g2D = (Graphics2D) g; g2D.setStroke(new BasicStroke(3.0f)); for(Segment s : listSegments){ s.Afficher(g); } } //------------------------------------------------------------------------- // Redéfinition de la méthode Animer, spécifiquement pour la classe Ligne //------------------------------------------------------------------------- @Override void Animer() { // On déplace chaque segment vers la gauche (vitesse arbitraire de 5) double vitesseDefilement = 5.0; // On met à jour le x de la ligne (utilisé pour le calcul de position) this.x -= vitesseDefilement; // On répercute sur chaque segment for (Segment s : listSegments) { s.setX(s.getX() - vitesseDefilement); } } public double getHauteurLigneA(double xCercle) { for (Segment s : listSegments) { // Si le segment couvre la position X du cercle if (xCercle >= s.getX() && xCercle <= (s.getX() + s.xLong)) { // Calcul de l'interpolation linéaire pour trouver le Y exact sur le segment double ratio = (xCercle - s.getX()) / s.xLong; return s.getY() + (ratio * s.yLong); } } return -1; // Hors de la ligne } }