Back to index

wims  3.65+svn20090927
Droite.java
Go to the documentation of this file.
00001 package geo ;
00002 
00003 import java.awt.Graphics ;
00004 
00009 public class Droite extends ObjetRepere
00010 {
00011 
00016   public double a, b, c;
00017 
00022   public Droite (String Nom, Repere R)
00023   { super (Nom, R); }
00024 
00029   public Droite (Droite d, String Nom, Repere R)
00030   { super (Nom, R); Droite (d) ; }
00031 
00036   public Droite (pt A, pt B, String Nom, Repere R)
00037   { super (Nom, R); Droite (A, B) ; }
00038 
00043   public Droite (pt A, Vecteur u, String Nom, Repere R)
00044   { super (Nom, R); Droite (A, u) ; }
00045 
00050   public Droite (double xA, double yA, double xB, double yB, String Nom, Repere R)
00051   { super (Nom, R); Droite (xA, yA, xB, yB) ; }
00052 
00057   public Droite (double a, double b, double c, String Nom, Repere R)
00058   { super (Nom, R); Droite (a, b, c) ; }
00059 
00064   public Droite (Segment s, String Nom, Repere R)
00065   { super (Nom, R); Droite (s) ; }
00066 
00071   public void Parallele (Droite d, pt A)
00072   { a = d.a; b = d.b; c = - (d.a * A.x + d.b * A.y);
00073     defini = d.defini; }
00074 
00080   public void Parallele (Segment s, pt A)
00081   { a = s.By - s.Ay; b = s.Ax - s.Bx;
00082     c = - (a * A.x + b * A.y);
00083     defini = ((a != 0.0) || (b != 0.0)) && (A.defini) ;
00084   }
00085 
00090   public void Perpendiculaire (Droite d, pt A)
00091   { a = - d.b; b = d.a; c = d.b * A.x - d.a * A.y;
00092     defini = d.defini && A.defini ; }
00093 
00099   public void Perpendiculaire (Segment s, pt A)
00100   { b = s.By - s.Ay; a = s.Bx - s.Ax;
00101     c = - (a * A.x + b * A.y);
00102     defini = ((a != 0.0) || (b != 0.0)) && A.defini ;
00103   }
00104 
00109   public void Mediatrice (pt A, pt B)
00110   { defini = A.defini && B.defini && ((A.x != B.x) || (A.y != B.y)) ;
00111     if (defini) { a = B.x - A.x ; b = B.y - A.y ;
00112                   c = (A.x * A.x - B.x * B.x + A.y * A.y - B.y * B.y) * 0.5 ;
00113                 }
00114   }
00115 
00120   public void Bissectrice (pt A, pt B, pt C)
00121   { defini = A.defini && B.defini && C.defini ;
00122     if (defini) { double bcx = C.x - B.x ; double bcy = C.y - B.y ;
00123                   double bc = Math.sqrt (bcx * bcx + bcy * bcy) ;
00124                   double bax = A.x - B.x ; double bay = A.y - B.y ;
00125                   double ba = Math.sqrt (bax * bax + bay * bay) ;
00126                   bax = bc * bax ; bay = bc * bay ; bcx = ba * bcx ; bcy = ba * bcy ;
00127                   Droite (B.x, B.y, B.x + bax + bcx, B.y + bay + bcy) ;
00128                 }
00129   }
00130 
00135    public boolean zone (int X, int Y)
00136    { if (defini)
00137        { double A = a / R.unitex ; double B = b / R.unitey ;
00138          double d = Math.abs (a * R.Abs (X) + b * R.Ord (Y) + c) / Math.sqrt (A * A + B * B) ;
00139          if (d <= 4.0) return true ; else return false ;
00140        }
00141      return false ;
00142    }
00143 
00148   public void trace (Graphics g)
00149   { int N, X1, Y1, X2, Y2;
00150     X1 = Y1 = X2 = Y2 = 0;
00151     if (defini)
00152       { if (Math.abs (b) >= Math.abs (a))
00153           { X1 = 0;
00154             Y1 = R.Iord (-(a * R.Abs (0) + c) / b);
00155             X2 = R.XMAX; 
00156             Y2 = R.Iord (-(a * R.Abs (X2) + c) / b); }
00157         else
00158           { Y1 = 0;
00159             X1 = R.Iabs (-(b * R.Ord (0) + c) / a);
00160             Y2 = R.YMAX;
00161             X2 = R.Iabs (-(b * R.Ord (Y2) + c) / a); }
00162             g.drawLine (X1, Y1, X2, Y2) ;
00163         if (Nom.length () != 0)
00164           { int i ;
00165             if (Math.abs (b) >= Math.abs (a))
00166               { i = R.XMAX / 2 ;
00167                 g.drawString (Nom, i + 3, R.Iord (- (a * R.Abs (i) + c) / b) - 3) ;
00168               }
00169             else
00170               { i = R.YMAX / 2 ;
00171                 g.drawString (Nom, R.Iabs (- (b * R.Ord (i) + c) / a) + 3, i - 3) ;
00172               }
00173           }
00174       }
00175   }
00176 
00181   public void Droite (pt A, pt B)
00182   { a = B.y - A.y; b = A.x - B.x ;
00183     c = A.y * B.x - A.x * B.y ;
00184     defini = ((a != 0.0) || (b != 0.0)) && A.defini && B.defini ; }
00185 
00190   public void Droite (pt A, Vecteur u)
00191   { defini = A.defini && u.defini && (u.x != 0.0 || u.y != 0.0) ;
00192     a = u.y ; b = - u.x ;
00193     c = A.y * u.x - A.x * u.y ; }
00194 
00199   public void Droite (double xA, double yA, double xB, double yB)
00200   { a = yB - yA ; b = xA - xB ;
00201     c = yA * xB - xA * yB ; defini = (a != 0.0) || (b != 0.0) ;
00202   }
00203 
00208   public void Droite (double a, double b, double c)
00209   { this.a = a ; this.b = b ; this.c = c ; defini = (a != 0.0) | (b != 0.0) ; }
00210 
00215   public void Droite (Droite d)
00216   { a = d.a; b = d.b; c = d.c; defini = d.defini ; }
00217 
00222   public void Droite (Segment s)
00223   { defini = s.defini ;
00224     if (defini) Droite (s.Ax, s.Ay, s.Bx, s.By) ;
00225   }
00226 
00227 
00228 }