#include "SND\snddef.h" #include "SNDinc.h" #include "SND.h" #include "sndvect.h" /* ////////////////////////////////////////////////////// // SNDVECT.CXX - Librairie SOUNDxd version 2.0 // ////////////////////////////////////////////////////// // Definitions des fonctions de gestion // // des vecteurs spatiaux // ////////////////////////////////////////////////////// */ SndReal SND_CALL SND_fn_rNormeVectorSnd(SndVector *v) { long sdc; sdc=(v->x>>8)*(v->x>>8)+(v->y>>8)*(v->y>>8)+(v->z>>8)*(v->z>>8); return sdc; } /*------------------------------------------------------------------*/ /* calcul_pseudo_d: calcul approximatif de la norme d'un vecteur 2D*/ /* Entrees:a,b=coordonnees du vecteur*/ /* Sortie:norme de ce vecteur*/ /**/ /*pseudo_d est une approximation de la distance entre les 2 points*/ /* droites d'equidistance avec O : y=-x/2+1 ou y=-2x+2 (selon le demi-quadrant)*/ /*------------------------------------------------------------------------*/ SndReal calcul_pseudo_d(SndReal a,SndReal b) { SndReal aa,bb; aa=abs(a);bb=abs(b); if (aa>1)); else return (aa+(bb>>1)); } /*-----------------------------------------------------------*/ /* PseudoNormeVectorSnd:calcul rapide de la norme approvee d'un vecteur 3D*/ /* Entree:v=vecteur concerne*/ /* Sortie:norme approchee de ce vecteur*/ /*-------------------------------------------------------------*/ SndReal SND_CALL SND_fn_rPseudoNormeVectorSnd(SndVector *v) { SndReal dx,dy,dz; dx=abs(v->x); dy=abs(v->y); dz=abs(v->z); return calcul_pseudo_d(calcul_pseudo_d(dx,dy),dz); } SndReal SND_CALL SND_fn_rScalaireVectorSnd(SndVector *v1,SndVector *v2) { return (SND_fn_rMulRealRealSnd(v1->x,v2->x) +SND_fn_rMulRealRealSnd(v1->y,v2->y) +SND_fn_rMulRealRealSnd(v1->z,v2->z)); } SndReal SND_CALL SND_fn_rPseudoScalaireNormeVectorSnd(SndVector *v1,SndVector *v2) { return (SND_fn_rMulRealRealQuickSnd(v1->x,v2->x) +SND_fn_rMulRealRealQuickSnd(v1->y,v2->y) +SND_fn_rMulRealRealQuickSnd(v1->z,v2->z)); } void SND_CALL SND_fn_vProduitVectorSnd(SndVector *v1,SndVector *v2,SndVector *v) { v->x=SND_fn_rMulRealRealSnd(v1->y,v2->z)-SND_fn_rMulRealRealSnd(v1->z,v2->y); v->y=SND_fn_rMulRealRealSnd(v1->z,v2->x)-SND_fn_rMulRealRealSnd(v1->x,v2->z); v->z=SND_fn_rMulRealRealSnd(v1->x,v2->y)-SND_fn_rMulRealRealSnd(v1->y,v2->x); }