Je dois connecter deux atomes (sphères). Je peux calculer la position et la longueur de la connexion requise mais j'ai du mal à calculer l'angle de rotation. J'utilise des matrices de rotation pour compléter la rotation. Je dois donc spécifier les angles XYZ pour construire ces matrices et effectuer la rotation réelle.
Donc ce que je fais :
-
Obtenir le vecteur entre les atomes représenté par les points a et b.
float3(b[0] - a[0], b[1] - a[1], b[2] - a[2])
-
Les cylindres sont verticaux par défaut donc leur vecteur est float3(0, 10, 0)
-
Pour chaque paire de coordonnées, j'essaie de calculer l'angle de rotation donc :
cylinder v = float3(0, 10, 0) atomV = float3(...)
X = getAngle(v[1], v[2], atomV[1], atomV[2]) Y = getAngle(v[0], v[2], atomV[0], atomV[2]) Z = getAngle(v[0], v[1], atomV[0], atomV[1])
getAngle(x1: Float, y1: Float, x2: Float, y2: Float)->Float { return atan2(x1 y2 - y1 x2, x1 x2 + y1 y2) }
Qu'est-ce que je fais mal? Merci d'avance!