Équation d'une spirale à partir de points

Le problème exposé dans ce sujet a été résolu.

Salut,

Je viens soliciter votre aide, parce que j'ai un problème qui me chipote. Je dois analyser des molécules qui ont la forme d'une spirale (comme l'ADN, par exemple). Je sais qu'elles ont la forme d'une spirale et que donc, je peux les décrire, pour des unités répétitives (ou pour les coordonées du même atome qui se répète) en employant

$$ \left\{\begin{array}{l} x = r\cos{\theta} \\ y = r\sin{\theta} \\ z = \frac{p}{2\pi}\,\theta \\ \end{array}\right. $$

Sauf qu'employer les coordonnées cylindriques requière que la spirale soit effectivement orientée selon un axe (Z dans ce cas-ci). Et là c'est le drame, puisque ce n'est absolument pas le cas (j'ai bien la spirale, mais elle est orientée n'importe comment). J'aimerai donc savoir si il existe un moyen simple et mathématique (que je sache implémenter dans un langage de programmation conventionnel) pour réorienter mes points de manière à ce que ma spirale soit dans le bon sens et que je puisse y appliquer ma formule ci-dessus ?

Sachant que mes recherches m'ont poussé à regarder si il n'y avais pas moyen de trouver la position du centre et de réorienter ensuite la molécule en calculant plusieurs fois le centre (en fait en cherchant l'équation du cercle correspondant avec 3 ou 4 points). Et ça ne fonctionne pas, parce que:

  • si je prend juste la coordonnée $x$ et $y$ (comme l'équation de la spirale le laisse entendre, puisque $z$ peut s'obtenir à partir de $x$ et $y$), comme tout est orienté n'importe comment, ça ne fonctionne pas (ça fonctionnerai si la molécule était déjà aligné selon un axe)
  • Si je prend $x$, $y$ et $z$, j'ai un centre, mais qui ne correspont pas au "bon centre", puisqu'il s'agit non pas d'un cercle mais d'une spirale, et je suis coincé.

Donc si quelqu'un avait une proposition, j'avoue que ça m'aiderai ;)

D'avance merci.

+1 -0

Mon intervention va surement être useless Pierre, désolé pour la fausse joie :p :
Si ta spirale a pour base un cercle les coordonnées x et y te donneront une ellipse oblique selon l'alignement de tes coordonnées non ?

Ça peut être la réponse à pourquoi 'je ne trouve pas le bon centre'


Désolé pour l'intervention surement inutile mais je suis curieux de savoir ce qu'en pense les matheux :p

+0 -0

Mmmmh, effectivement, j'avais pas pensé à ça (ai-je déjà mentionné que j'avais telement pas aimé les côniques en secondaire que je me suis empressé d'oublier ?). Je peux toujours tester et voir ce que ça donne ;)

(ps: en vrai, c'est pas de l'ADN mais des dérivés d'hélicene, j'ai mis ADN parce que tout le monde vois à peu près à quoi ressemble l'ADN :p )

+1 -0

@holosmos: ce qui m'intéresse, c'est d'obtenir $r$ (le rayon) et $p$ (le pitch, aka la séparation entre deux niveaux). Ensuite, je vais devoir m'intéresser à la modification de ceux-ci à travers une série de molécules similaires, d'où cette paramétrisation un peu étrange pour $z$. Je pense en tout cas que c'est correct, mais je peux me tromper :)

+0 -0

Si tu as une série de points $(x_n,y_n,z_n)$ qui décrivent ta molécule dans un repère quelconque, tu peux faire la moyenne sur un certain nombre de point consécutif (les 10 ou 100 premiers par exemple), tu obtiens ainsi un point de l'axe central. En répétant sur les suivants , tu peux avoir un second point l'axe central. De là tombe une équation paramétrique et son orientation dans un repère.

Pour plus de précision, tu peux parcourir toute la spirale par tranche et faire un moindre carré pour fitter une équation de droite sur les points obtenus.

Il en te reste plus qu'à faire une/des rotation(s) (centrée autours du centre de gravité) pour ramener l'axe de la molécule selon Z.

+1 -0

Si tu as une série de points $(x_n,y_n,z_n)$ qui décrivent ta molécule dans un repère quelconque, tu peux faire la moyenne sur un certain nombre de point consécutif (les 10 ou 100 premiers par exemple), tu obtiens ainsi un point de l'axe central. En répétant sur les suivants , tu peux avoir un second point l'axe central. De là tombe une équation paramétrique et son orientation dans un repère.

Je n'ai malheureusement "que" 12 points, parce que je suis limité par autre chose. J'ai donc pensé à ton idée, mais avec aussi peu de point, ça ne fonctionne si je connait le nombre de point par tour d'hélice, or c'est justement ce que je cherche (entre autre) à connaitre. Après, je peut "deviner", mais je suis pas sur que j'arriverait à quelque chose de correct avec ça (surtout si la répétition intervient à plus de 12 unités, ce que je craint dans certains cas)

Pour plus de précision, tu peux parcourir toute la spirale par tranche et faire un moindre carré pour fitter une équation de droite sur les points obtenus.

Dernier recours, mais si rien ne fonctionne, je passerai effectivement au fitting par moindre carrés. Je sais pas encore exactement quoi fitter, mais je trouverai. J'aimerai juste savoir si il existe pas une solution moins "coûteuse" avant.

Il en te reste plus qu'à faire une/des rotation(s) (centrée autours du centre de gravité) pour ramener l'axe de la molécule selon Z.

Davidbrcz

Ça, c'est la partie "facile" (par là j'entend que j'ai déjà le code pour le faire ;) )

Il y a quelque chose que j'ai pas bien saisi. Les points dont tu as la mesure, ils sont placé sur une hélice qui est bien jolie ou alors elle est déformée et il faut réarranger les points pour reformer une hélice ?

Holosmos

Elle est bien jolie, pas besoin de réaranger les points. Juste les "tourner" pour qu'ils soient bien dans l'axe et que je puisse appliquer ma jolie équation paramétrique qui va bien. Autrement dit, je cherche la matrice de rotation qui va bien.

Je n'ai malheureusement "que" 12 points, parce que je suis limité par autre chose. C'est pas beaucoup =/.

Dernier recours, mais si rien ne fonctionne, je passerai effectivement au fitting par moindre carrés. Je sais pas encore exactement quoi fitter, mais je trouverai. J'aimerai juste savoir si il existe pas une solution moins "coûteuse" avant.

Les moindre carré c'est pas ultra couteux si ton problème est linéaire (résolution exacte).

Tu peux essayer de prendre une équation carthesienne d'hélice bien orientée, lui faire subir 3 rotations autour de 3 axes (selon les angles d'euler) et des translations selon les aexes du répères. Tu devrais obtenir un modèle à 6 + 2 (si je compte bien) inconnues qu'il suffit de faire fitter àu mieux à tes 12 points.

Ecrire le modèle peut être un poil calculatoire, essaye de regarder s'il n'existe pas des formulaires dans des handbook. Truc chiant, c'est que ton modèle sera pas du tout linéaire (des cos/sin de partout).

Enfin, pour le fit, faut voir si tu as accès à des outils sympathiques (R, matlab) ou se le faire à la main dans du code (avec des bibliothèques qui vont bien pour éviter de coder les algos classiques).

PS : Les maths remontent pour moi, donc faut pas hésiter à me corriger si je dis des grosses conneries.

+0 -0

J'essaierais une analyse en composantes principales (PCA).

La forme en spirale correspond-t-elle à un cylindre ayant sa hauteur grande devant son diamètre ? Si oui, alors l'axe du cylindre devrait correspondre au vecteur propre de plus grande valeur propre obtenu par PCA, i.e. la direction de plus grande variance de l'ensemble de points. De plus, les trois vecteurs propres obtenus par PCA correspondraient au nouveau repère.

La forme en spirale correspond-t-elle à un cylindre ayant sa hauteur grande devant son diamètre ? Si oui, alors l'axe du cylindre devrait correspondre au vecteur propre de plus grande valeur propre obtenu par PCA, i.e. la direction de plus grande variance de l'ensemble de points. De plus, les trois vecteurs propres obtenus par PCA correspondraient au nouveau repère.

Ryuuken

La spirale étant enroulée sur elle-même (si j'ai bien compris), ça risque de ne pas marcher. Qui plus est, avec seulement 12 points, s'appuyer sur une méthode stat peut donner des résultats bizarres, je pense.

Les moindre carré c'est pas ultra couteux si ton problème est linéaire (résolution exacte).

Hmm… Les moindres carrés au sens strict sont une méthode d'inversion exacte bien précise pour les problèmes linéaires. Maintenant, on appelle "moindres carrés" plein de méthodes qui marchent sur le principe de réduire le carré de la distance entre un modèle et des observations. Je pense qu'ici, pierre pense à une méthode exploratoire qui sera effectivement coûteuse.

Cela dit, j'ai l'impression que selon le degré d'enroulement, avoir seulement 12 points risque de ne pas assurer l'unicité de l'inversion… Je pense que ça peut valoir le coup d'essayer une méthode exploratoire pour vérifier que tu n'as pas plusieurs pics de densité de probabilité dans l'espace des modèles.

+0 -0

La spirale étant enroulée sur elle-même (si j'ai bien compris), ça risque de ne pas marcher.

j'avoue que je suis pas sur d'être sur qu'on parle de la même chose. Du coup, voici un exemple:

J'ai dû enlever des atomes parce que je suis pas sur de pouvoir montrer la structure complète, mais dans tout les cas, c'est bien une spirale (et ça doit en être une, de toute façon, il y a un axe de translation dedans, c'est la cristalo qui le dit). Pour des raisons de répétition de cellule unitaire, je ne peut me baser que sur les atomes en "bleu", même si il serait tentant de considérer également les autres de la spirale interne (faites comme si ils n'existaient pas).

Du coup, voilà. J'ai tenté la solution de Blackline (ce qui coupe un cylindre doit être une ellipse), mais trouver une solution facilement implémentation pour trouver l'équation d'une ellipse à partir de 4 points relève du challenge plus qu'autre chose, et ça ne semble pas fonctionner (ou je me suis planté quelque part).

Les moindres carrés, pourquoi pas, mais encore une fois, je sais pas quoi fitter. Il me faudrait une équation "générale" d'une hélice tournée dans n'importe quel sens, ce que je n'ai pas et que je n'arrive pas à trouver (ou alors, je doit faire un mix entre les coordonnées cylindriques et sphériques). L'implémentation, par contre, c'est "facile", puisque Numpy donne la méthode, il suffit de l'appliquer (et dessous, c'est Lapack/Blas et consœur donc je m'inquiète pas trop pour la vitesse, malgré que ce soit du python).

Sauf qu'employer les coordonnées cylindriques requière que la spirale soit effectivement orientée selon un axe (Z dans ce cas-ci). Et là c'est le drame, puisque ce n'est absolument pas le cas (j'ai bien la spirale, mais elle est orientée n'importe comment).

Quand tu dis ça, j'ai l'impression que la spirale est en "pelote" en quelque sorte. Si elle est droite mais que c'est juste qu'elle est pas alignée avec les axes du repère, et que tu as un nombre entier de tour, suffit de sommer les vecteurs position, non ? Les composantes radiales se compenseront entre elles et il te restera juste la somme des composantes axiales.

+0 -0

Sauf que mon but ce n'est aucunement de remettre en question les descriptions de Pierre qui furent comprises par tout le monde (moi le premier, ayant posté directement). J'essaye juste de comprendre comment s'appelle cet objet géométrique ^^

J'avais pas envie d'ouvrir un autre post. Donc si j'ai bien compris une hélice c'est une sorte de spirale. Mais une Hélice, c'est précisément la forme de l'ADN ? :o (En fait je ne connais pas la différence entre Hélocoïdale et Hélice, c'est peut-être là que j'suis dans l'flou ^^' )

+0 -0

Possiblement:avec quatres points P1 P2 P3 et P4 à la suite avec un angle toujours constant et un changement de hauteur constant et v le vecteur directeur de l'axe du "cylindre" on à H2 milieu de P1 P3 et H3 milieu de P2 P4 et du coup on a P2H2 orthogonal à v et P3H3 orthogonal à v ce qui est suffisant pour trouver v. Apres on projette P1 P2 P3 sur le paln de vecteur normal v passant par l'un des trois on trovue le centre du cercle (disons O) donc un point de l'axe et on peut exprimer la spirale dans le repere (v;OP1;orthogonal aux deux) ou changer de repere non ?

La spirale étant enroulée sur elle-même (si j'ai bien compris), ça risque de ne pas marcher. Qui plus est, avec seulement 12 points, s'appuyer sur une méthode stat peut donner des résultats bizarres, je pense.

@dri1

Que PCA ait une interprétation statistique n'est pas important. C'est aussi une méthode géométrique, et c'est son interprétation géométrique qui nous intéresse ici : elle donne les directions caractéristiques de l'objet représenté par un nuage de points. À vue de nez, je pense qu'on peut espérer un résultat acceptable même avec seulement 12 points. Je vois ce que tu veux dire à propos du fait que la spirale soit enroulée pourrait peut-être fausser un peu les résultats de la PCA. Je n'arrive pas imaginer si ça serait le cas ou non. Pour moi, c'est à essayer, surtout qu'il existe probablement une librairie que l'on peut utiliser qui fait le job, tant la méthode est classique.

Connectez-vous pour pouvoir poster un message.
Connexion

Pas encore membre ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte