public class IntersectionDroites2D {

/* Type agrege de stockage de coordonnees      */
/* reelles en deux dimensions                  */

  static class Coordonnees2D {
    double x = 0.0;
    double y = 0.0; };

/* Type agrege de stockage des composantes     */
/* reelles d'une droite du plan                */

  static class Droite2D {
    double a = 0.0;
    double b = 0.0; };

/* Calcul de l'intersection entre deux droites */
/* d'équations y = a1*x+b1 et y = a2*x+b2      */

  static Coordonnees2D intersection(Droite2D d1,
                                    Droite2D d2) {
    Coordonnees2D inter = new Coordonnees2D();
    inter.x = (d2.b-d1.b)/(d1.a-d2.a);
    inter.y = d1.a*inter.x+d1.b;
    return inter;
  }

/* Programme principal                         */

  public static void main(String [] args) {
    Droite2D d1 = new Droite2D();
    Droite2D d2 = new Droite2D();
    Coordonnees2D inter;
    Ecran.afficher("SVP, coefficient directeur droite 1 : ");
    d1.a = Clavier.saisirDouble();  
    Ecran.afficher("SVP, ordonnée à l'origine droite 1  : ");
    d1.b = Clavier.saisirDouble();  
    Ecran.afficher("SVP, coefficient directeur droite 2 : ");
    d2.a = Clavier.saisirDouble();  
    Ecran.afficher("SVP, ordonnée à l'origine droite 2  : ");
    d2.b = Clavier.saisirDouble();  
    inter = intersection(d1,d2);
    Ecran.afficherln("Intersection : ( ",inter.x," , ",inter.y," )");
  }
}