website logo
Auteur
avatar
thellier

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


Posté : 05-09-2013 15:04 icone du post

GRANDS MERCIS
J'avais vu qque chose de similaire sur wikipedia mais là c'est bien mieux fait

OK on remets tout en C et ça devrais donner ça :
==================================

Vertex3D A,B,V;
Vertex3D AV,AB,P;
float h2,h,x;

AV.x =V.x - A.x;
AV.y =V.y - A.y;
AV.z =V.z - A.z;

AB.x =B.x - A.x;
AB.y =B.y - A.y;
AB.z =B.z - A.z;

P.x=AV.y*AB.z - AV.z*AB.y;
P.y=AV.z*AB.x - AV.x*AB.z;
P.z=AV.x*AB.y - AV.y*AB.x;

h2 =( P.x*P.x + P.y*P.y + P.z*P.z) / (AB.x*AB.x + AB.y*AB.y +AB.z*AB.z);
h = sqrt(h2);

x = sqrt( AV.x*AV.x + AV.y*AV.y + AV.z*AV.z - h2)
if( ( AV.x*AB.x + AV.y*AB.y + AV.z*AB.z ) <0)
x=-x;

=====================================
C'est moi ? ou alors le language C parais plus clair que celui des maths ? ;-P

A noter que AB est constant puisque c'est la longueur de l'os (bone) au repos (et on fait la "skin" sur le bonhomme au repos) donc on peut le précalculer (valable pour tout les Vs) et que dès que h2 est connu on peut savoir si le point V n'appartient pas à ce bone car trop éloigné de l'os
x ne sert en fait qu'à calculer la "force" à appliquer à ce point V


Ca devrait marcher

Alain



Message édité par : thellier / 05-09-2013 15:14
Message édité par : thellier / 05-09-2013 15:15

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