Bonjour!
J'aimerai calculer l'axe d'une helice alpha, sturcture secondaire d'une protéine et pour l'instant ma méthode ne march pas!
Pour cela, Kahn explique une méthode que voici :
"the helix axis algorithm finds the axis of a helix using vector algebra. An axis segment is generated for each four consecutive amino acids. The angle created by the first three alpha-carbons (CA1, CA2, CA3) is bisected, and then the angle created by the second three alpha-carbons (CA2, CA3, CA4) is bisected. Since these two vectors pass through the helix axis, the cross product of them gives the direction cosines of the axis."
et voila comment je fais sachant que j'ai les coordonnées x, y et z des points CAn.
je calcule les vecteurs i et j tel que :
Xi=Xca2-Xca1
Yi=Yca2-Yca1
Zi=Zca2-Zca1
Xj=Xca3-Xca2
Yj=Yca3-Yca2
Zj=Zca3-Zca2
je calcule l'angle teta entre ces deux vecteurs selon la formule des produits scalaires :
cos(teta)=((Xi*Xj)+(Yi*Yj)+(Zi *Zj))/sqrt((Xi²+Yi²+Zi²)*(Xj²+Yj²+Zj ²))
je calcule le cross produit entre i et j que je nommerai w:
Xw=(Yi*Zj)-(Zi*Yj);
Yw=(Zi*Xj)-(Xi*Zj);
Zw=(Xi*Yj)-(Yi*Xj);
puis je calcule le cross produit entre w et i que je nommerai k (i, w et k sont supposé me donner un repère orthogonal) :
Xk=(Yi*Zw)-(Zi*Yw);
Yk=(Zi*Xw)-(Xi*Zw);
Zk=(Xi*Yw)-(Yi*Xw);
Comme k et i forme un repère orthogonal dans le plan (i,j), j'ai t vecteur appartenant a la bissectrice entre i et j qui donne :
t=cos(teta/2)i + sin (teta/2)k
soit
Xt = cos(teta/2)*(Xi/norme(i)+sin(teta/2)*(Xk/norme(k)
Yt = cos(teta/2)*(Yi/norme(i)+sin(teta/2)*(Yk/norme(k)
Zt = cos(teta/2)*(Zi/norme(i)+sin(teta/2)*(Zk/norme(k)
############################## ##########################
je refais tout ca avec les 3 points suivant ca2, ca3 et ca4, ce qui me donne le vecteur t'.
############################## ########################
Je fais le cross-produit de t*t' :
Xaxe=(Yt*Zt')-(Zt*Yt');
Yaxe=(Zt*Xt')-(Xt*Zt');
Zaxe=(Xt*Yt')-(Yt*Xt');
et je pensais obtenir un vecteur appartenant la l'axe de l'helice localisé vers les points ca1, ca2, ca3 et ca4 de l'helice.
Mais pour vérifier mon algorithme, j'ai calculer 2 vecteurs d'un même axe distancer de 1 résidu :
un vecteur pour ca1, ca2, ca3 et ca4
un autre vecteur pour ca6, ca7, ca8 et ca9
et en calculant l'angle entre ces deux vecteurs, je tombe sur 100° et non 0° ou 180°.
Et j'ai beau cherché, je ne comprends pas ce que j'ai mal fait!
Pouvez vous m'aider s'il vous plait?
-----