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

public class DistanceSpheresEnConsole {

/* 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) {
    Console.setTitle("DistanceSpheres");
    Sphere sp1 = new Sphere();
    Sphere sp2 = new Sphere();
    double dx;
    double dy;
    double dz;
    double distance;
    Console.afficherln("Premiere sphere");
    Console.afficher("Rayon                  ? ");
    sp1.rayon = Console.saisirDouble();
    Console.afficher("Coordonnee x du centre ? ");
    sp1.centre.x = Console.saisirDouble();
    Console.afficher("Coordonnee y du centre ? ");
    sp1.centre.y = Console.saisirDouble();
    Console.afficher("Coordonnee z du centre ? ");
    sp1.centre.z = Console.saisirDouble();
    Console.afficherln("Deuxieme sphere");
    Console.afficher("Rayon                  ? ");
    sp2.rayon = Console.saisirDouble();
    Console.afficher("Coordonnee x du centre ? ");
    sp2.centre.x = Console.saisirDouble();
    Console.afficher("Coordonnee y du centre ? ");
    sp2.centre.y = Console.saisirDouble();
    Console.afficher("Coordonnee z du centre ? ");
    sp2.centre.z = Console.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; }
    Console.afficher("La distance est ",distance);
  }
}