 
  
    Rayon incident en jaune, normale en magenta, rayon réfléchi en rouge, rayon transmis en bleu
    ni > nt -> Rayon transmis dévié vers le plan d'interface
     
  
ni < nt -> Rayon transmis dévié vers le vecteur opposé au vecteur normal
     
  
Cas particulier: Pas de rayon transmis
Fichier source principal : ReflexionEtTransmission.cpp
    Fichiers de l'application : ReflexionEtTransmission.zip
    Classes mathématiques : Mathematiques.zip
    /* Methode de calcul de la direction        */
        /* de reflexion speculaire a partir         */
        /* de la direction d'incidence i            */
        /* et de la normale n au point d'incidence  */
        /* Affectation du resultat a this           */
    
        bool reflexion(Dir3D *i,Dir3D *n);
    
        /* Methode de calcul de la direction        */
        /* de transmission a partir                 */
        /* de la direction d'incidence i,           */
        /* de la normale n au point d'incidence     */
        /* et du rapport niSurNt calcule entre      */
        /* les coefficients de refraction           */
        /* des milieux d'incidence                  */
        /* et de transmission                       */
        /* Affectation du resultat a this           */
    
        bool transmission(Dir3D *i,Dir3D *n,float niSurNt);
/* Methode de calcul de la direction            */
    /* de reflexion speculaire a partir             */
    /* de la direction d'incidence i                */
    /* et de la normale n au point d'incidence      */
    /* Affectation du resultat a this               */
    
    bool Dir3D::reflexion(Dir3D *i,Dir3D *n) {
      float ps = i->produitScalaire(n);
      if ( ps < 0.0 ) return(false);
      x = 2.0F*ps*n->x-i->x;
      y = 2.0F*ps*n->y-i->y;
      z = 2.0F*ps*n->z-i->z;
      return(true);
    }
    
    /* Methode de calcul de la direction            */
    /* de transmission a partir                     */
    /* de la direction d'incidence i,               */
    /* de la normale n au point d'incidence         */
    /* et du rapport niSurNt calcule entre          */
    /* les coefficients de refraction               */
    /* des milieux d'incidence et de transmission   */
    /* Affectation du resultat a this               */
    
    bool Dir3D::transmission(Dir3D *i,Dir3D *n,float niSurNt) {
      float ps = i->produitScalaire(n);
      float v = 1.0F-(niSurNt*niSurNt*(1.0F-ps*ps));
      if ( v < 0.0 ) return(false);
      v =(float) (niSurNt*ps-sqrt(v));
      x = v*n->x - niSurNt*i->x;
      y = v*n->y - niSurNt*i->y;
      z = v*n->z - niSurNt*i->z;
      return(true);
    }