/* Manipulations sur des spheres et des droites 3D */

public class DistanceSpheres {

/* Type agrege de stockage d'une position 3D       */
  
  static class Position3D {
    double x = 0.0;
    double y = 0.0;
    double z = 0.0; };

/* Type agrege de stockage d'une sphere 3D        */
  
  static class Sphere {
    double rayon = 1.0;
    Position3D centre = new Position3D(); };

/* Programme principal                             */

  public static void main(String [] args) {
    Sphere sp1 = new Sphere();
    Sphere sp2 = new Sphere();
    double dx;
    double dy;
    double dz;
    double distance;
    Ecran.afficherln("Premiere sphere");
    Ecran.afficher("Rayon                  ? ");
    sp1.rayon = Clavier.saisirDouble();
    Ecran.afficher("Coordonnee x du centre ? ");
    sp1.centre.x = Clavier.saisirDouble();
    Ecran.afficher("Coordonnee y du centre ? ");
    sp1.centre.y = Clavier.saisirDouble();
    Ecran.afficher("Coordonnee z du centre ? ");
    sp1.centre.z = Clavier.saisirDouble();
    Ecran.afficherln("Deuxieme sphere");
    Ecran.afficher("Rayon                  ? ");
    sp2.rayon = Clavier.saisirDouble();
    Ecran.afficher("Coordonnee x du centre ? ");
    sp2.centre.x = Clavier.saisirDouble();
    Ecran.afficher("Coordonnee y du centre ? ");
    sp2.centre.y = Clavier.saisirDouble();
    Ecran.afficher("Coordonnee z du centre ? ");
    sp2.centre.z = Clavier.saisirDouble();
    dx = sp1.centre.x-sp2.centre.x;
    dy = sp1.centre.y-sp2.centre.y;
    dz = sp1.centre.z-sp2.centre.z;
    distance = Math.sqrt(dx*dx+dy*dy+dz*dz);
    distance = distance-sp1.rayon-sp2.rayon;
    if ( distance < 0.0 ) {
      distance = 0.0; }
    Ecran.afficher("La distance est ",distance);
  }
}