website logo
Auteur
avatar
thellier

Forum » » Création-Développement » » Question math 3D


Posté : 05-09-2013 11:12 icone du post

@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