Je suis d'accord avec ça, on est perdant
Finalement, je n’en suis plus si sur que ça.
Je marche un peu sur des œufs à ce niveau là, car c’est vraiment pas mon domaine. Donc à vous les informaticiens de me corriger si je dis une grosse bêtise.
J’ai une idée plus que vague des algorithmes utilisés pour calculer des fonctions non linéaires tels que sinus, arcsinus, racine carrée etc. Mais je pense que ça nécessite un nombre relativement élevé de multiplications et d’additions. Donc, deux opérations non linéaires (2 racines carrées si je compte llVecMag(dprod)) d’un côté, deux de l’autre (sinus et arcsinus).
Bon, de toute façon, je pense qu’on chipote sur pas grand chose.
Le double produit vectoriel dprod = (k1%uz)%uz , dans la mesure où le calcule se fait par les coordonnées, ne nécessite que quleques multiplications et additions.
la simple trigo l'emporte sans problème comme bien souvent. Et même notre bon vieux Pythagore doit encore tenir la route, c'était d'ailleurs mon option lorsque j'ai écrit mon script
.
C’était la mienne aussi, au départ.
Une fois qu’on a fait un schéma à peu près propre, on a immédiatement les équations qui donnent les paramètres de position de la bielle, et du piston (voir schéma).
En introduisant le point Q de manière à avoir deux triangles rectangles, on a
Pour le triangle ABQ distance(BQ) = e*sin(alpha) distance(AQ) = e*cos(alpha)
Pour le triangle BCQ distance(BQ) = -L*sin(beta) distance(QC) = L*cos(beta)
(signe « moins » de -L*sin(beta) parce que beta est négatif.)
D’où e*sin(alpha) = -L*sin(beta)
Et distance(AC) = e*cos(alpha) + L*cos(beta)
De plus, cette méthode a l’avantage d’être accessible au plus grand nombre, la seule difficulté étant de poser proprement le probème.
Ce qui m’a incité à chercher une méthode un peu plus élégante, est ta remarque suivante. Pour la beauté de la chose seulement, sans croire à un réel intérêt pratique au départ :
Je pensais pouvoir introduire une notion de contrainte pour éviter les cos et sin (…)
Mais aussi, plus récemment :
En particulier sur la manipulation des vecteurs qui simplifie énormément les calculs.
Finalement, la formulation de ce que tu as appelé « contrainte » par un produit vectoriel, plutôt qu’un produit scalaire, ou la trigonométrie dans le plan, a tout de même un énorme avantage :
Elle est valable dans l’espace, et pas seulement dans le plan
Les instructions
vector dprod = (k1%uz)%uz; //double produit vectoriel
float mu = llSqrt(L*L - e*e*llVecMag(dprod));
vector k2 = (e/L)*dprod + mu*zu;
sont indépendantes de la base utilisée pour exprimer les vecteurs k1 et zuz.
Par conséquent, une fois que l’orientation quelconque de la prim racine a été réglée pour les vecteurs k1 et uz, l’expression de k2 ci-dessus reste valable quelque soit l’orientation de la prim racine.
Au bout du compte, on arrive à quelque chose qui fait penser à du calcul formel, et je dirais +1000 à ta remarque sur la « la manipulation des vecteurs qui simplifie énormément les calculs ».