public class Produits3D {

/////////////////////////////////////////////////

/* Type agrege de stockage d'une direction     */
/* dans un espace trois dimensions             */
/* a coordonnees reelles                       */

  static class Direction3D {
    double x = 0.0;
    double y = 0.0;
    double z = 0.0; };

/* Calcul du produit scalaire de 2 Direction3D */

  static double produitScalaire(Direction3D d1,
                                Direction3D d2) {
    double res = d1.x*d2.x+d1.y*d2.y+d1.z*d2.z;
    return res;
  }

/* Calcul du produit vectoriel                 */
/* de 2 Direction3D                            */

  static Direction3D produitVectoriel(Direction3D d1,
                                      Direction3D d2) {
    Direction3D res = new Direction3D();
    res.x = d1.y*d2.z-d1.z*d2.y;
    res.y = d1.z*d2.x-d1.x*d2.z;
    res.z = d1.x*d2.y-d1.y*d2.x;
    return res;
  }

/* Programme principal                         */

  public static void main(String [] args) {
    Direction3D d1 = new Direction3D();
    Direction3D d2 = new Direction3D();
    double ps;
    Direction3D pv;
    Ecran.afficherln("Veuillez saisir la premiere direction");
    d1.x = Clavier.saisirDouble();
    d1.y = Clavier.saisirDouble();
    d1.z = Clavier.saisirDouble();
    Ecran.afficherln("Veuillez saisir la seconde direction");
    d2.x = Clavier.saisirDouble();
    d2.y = Clavier.saisirDouble();
    d2.z = Clavier.saisirDouble();
    ps = produitScalaire(d1,d2);
    pv = produitVectoriel(d1,d2);
    Ecran.afficherln("Produit scalaire : ",ps);
    Ecran.afficherln("Produit vectoriel : ",pv.x,", ",pv.y,", ",pv.z);
  }

/////////////////////////////////////////////////
}