2010-11-04 30 views
11

Si j'ai un ensemble arbitraire de points, puis le même ensemble de points pivotés d'un certain degré, quelqu'un connaît-il des algorithmes pour calculer/estimer où le centre de la rotation est ? Ou un domaine d'étude où ces types d'algorithmes sont nécessaires? J'ai du mal à trouver des informations pertinentes.Recherche du centre de rotation pour un ensemble de points

Merci

+0

La Terre _rote_ sur son axe. Il _revolves_ autour du soleil. À quoi faites-vous référence? –

+0

La correspondance entre les points est-elle connue? – nav

+0

Cette question semble être hors sujet car il s'agit de maths, pas de programmation. – bmargulies

Répondre

9

Disons que vous avez un point (x, y), qui a déménagé à (x 'y').

Ensuite, le centre de rotation doit se trouver sur la ligne qui est perpendiculaire à (x, y) - (x ', y') et qui coupe le centre (x, y) - (x ', y') .

Prenez maintenant un autre point, (x2, y2), qui s'est déplacé vers (x'2, y'2). Cela donne également naissance à une ligne sur laquelle le centre de rotation doit être situé.

Prenez maintenant ces deux lignes et calculez l'intersection. Là vous avez le centre de rotation. Mise à jour: Si vous n'avez pas la correspondance de quel point est allé où, il ne devrait pas être trop difficile à comprendre. Voici une suggestion du haut de ma tête: Trouver le centre de masse des points «avant». Commandez les points en fonction de leur distance à partir de ce point. Faites de même avec les points "après". L'ordre des deux ensembles devrait maintenant correspondre. (Le point le plus proche du centre de masse avant la rotation, devrait être le point le plus proche du centre de masse après rotation.)

+0

cet algorithme est bon quand il connaît la relation entre les points. dans deux articles différents. –

+0

C'est un bon processus si vous comprenez la corrélation entre les points, c'est-à-dire s'ils sont étiquetés, mais s'ils sont arbitraires avant et après, la question devient beaucoup plus difficile (en raison du problème d'identité, comment identifiez-vous le point est le même avant et après la rotation?). –

+0

Qui a dit qu'il ne l'a pas fait? Et même s'il n'a pas cette relation, il doit la comprendre avant de résoudre tout le problème, et à partir du moment où il l'a compris, cet algorithme l'aidera. – aioobe

1

problème très intéressant. Mes connaissances à ce sujet sont un peu dépassées, mais si je me souviens bien, il y a quelques recherches sur l'utilisation de l'analyse sous-graphique à ce sujet; c'est-à-dire, caractériser des sous-sections de l'ensemble de points par les distances entre les points et les variances, et ensuite corréler ces analyses sous-graphiques entre les rotations avant et après. Ceci suppose, bien sûr, un ensemble très complexe de points avec une distribution non uniforme.

3

Il serait fou de surpasser pour ce type de problème, mais je pense que la fonctionnalité generalized Hough transform pour la détection d'objet au moins englobe ce que vous voulez, même si ce n'est pas tout à fait à cet effet.

Étant donné une forme arbitraire créée à partir d'un ensemble de points et d'un autre ensemble arbitraire de points, il tente de trouver la forme dans l'ensemble des points même s'il a été pivoté, mis à l'échelle et traduit. Vous pourriez être en mesure de prendre la mise à l'échelle et la traduction et obtenir ce que vous voulez. Fondamentalement, ce qu'il faudrait faire est de forcer brutalement les points de rotation possibles pour voir lequel correspond le mieux au deuxième ensemble de points.

0

Vous devez trouver une signature sur votre jeu de données qui permet d'identifier les points du premier jeu (A) avec ceux du second jeu (B).

Un moyen facile est la suivante:

  • Pour chaque élément E A, trouver les deux points les plus proches (N1, N2) et de calculer l'angle entre N1, E, N2 résultant en trois valeurs: l'angle et les distances de E à N1 et N2 (ang, d1, d2).

  • Trouver 3 points dans A avec des tuples uniques (ang, d1, d2).

  • Pour chaque élément de B, calculez également la distance par rapport à ses deux voisins les plus proches et l'angle. Trouver les 3 points correspondant à ceux choisis parmi A.

  • Calculer la rotation est juste une question d'analyse géométrique.

mise à jour: vous avez besoin de 3 points pour déterminer la rotation dans l'espace 3D. En 2D, deux feront l'affaire.

mise à jour 2: comme d'autres ont commenté d'autres articles, il peut y avoir des symétries dans A qui vous empêcheraient de trouver les 3 triplets uniques pour (ang, d1, d2). Dans ce cas, pour chacun des trois points sélectionnés dans A, vous devrez effectuer une recherche sur tous les éléments de B correspondant à leurs triplets jusqu'à ce qu'une combinaison aboutisse à une rotation qui fonctionne pour tous les éléments de A.