#include #include typedef struct Direction { float x; float y; float z; float w; } Direction ; float produitScalaire(Direction *d1,Direction *d2) { return(d1->x*d2->x+d1->y*d2->y+d1->z*d2->z); } int rayonReflechi(Direction *i,Direction *n,Direction *r) { float ps = produitScalaire(n,i); if ( ps < 0 ) return(0); r->x = 2.0F*ps*n->x - i->x; r->y = 2.0F*ps*n->y - i->y; r->z = 2.0F*ps*n->z - i->z; return(1); } int main(void) { Direction n = { 0.0F,0.6F,0.8F,0.0F }; Direction i = { 0.6F,0.8F,0.0F,0.0F }; Direction r; int b = rayonReflechi(&i,&n,&r); printf("Rayon incident : %10f %10f %10f\n",i.x,i.y,i.z); printf("Normale : %10f %10f %10f\n",n.x,n.y,n.z); if ( b ) printf("Rayon reflechi : %10f %10f %10f\n",r.x,r.y,r.z); else printf("Pas de rayon reflechi\n"); return(0); }