Forum » » Création-Développement » » Question math 3D
Posté : 05-09-2013 11:12
@scriptjester
MERCI j'aurai préféré plus simple
Voilà ce que j'en comprends en reprenant son nommage:
ux * ax + uy * ay + uz * az + d = 0
-(ux * ax + uy * ay + uz * az ) = d
ux*(ux*k+bx) + uy(uy*k+by) + uz(uz*k+bz)+d=0
ux*ux*k+ux*bx + uy*uy*k+uy*by + uz*uz*k+uz*bz + d=0
k * (ux*ux + uy*uy + uz*uz) = - ( ux*bx + uy*by + uz*bz + d)
k= - ( ux*bx + uy*by + uz*bz + d) / (ux*ux + uy*uy + uz*uz)
hx=ux*k+bx
hy=uy*k+by
hz=uz*k+bz
=====================================================
En le remettant en langage C dans mon problème avec A-B le segment et V le point à tester:
/* calcul du vecteur directeur u */
U.x = B.x -A.x;
U.y = B.y -A.y;
U.z = B.z -A.z;
size=sqrt(U.x*U.x+U.y*U.y+U.z*U.z);
U.x = U.x/size;
U.y = U.y/size;
U.z = U.z/size;
/* d selon sa formule */
d= -(U.x * V.x + U.y * V.y + U.z * V.z ) ;
/* k selon sa formule */
k= - ( U.x*A.x + U.y*A.y + U.z*A.z + d) / (U.x*U.x + U.y*U.y + U.z*U.z) ;
/* point intersection H */
H.x=U.x*k + A.x;
H.y=U.y*k + A.y;
H.z=U.z*k + A.z;
/* enfin d et x mes inconnues */
d=DistanceV(&H,&V);
x=DistanceV(&H,&A);
Mais y reste toujours un problème x n'a plus de signe alors que x peut être négatif si il se trouve "devant" A
Evidemment on peut calculer les distance AH et BH et AB et comparer et déterminer si il se trouve "devant" A ... mais que de calculs.... Y doit y avoir plus simple
Personne connais un prof de math ??? ;-P
Alain
Cet article provient de Le site des utilisateurs francophones actuels et futurs d'AmigaOS 4.x
https://amiga-ng.org/viewtopic.php?topic=1651&forum=14