2010-11-04 18 views
11

Si tengo un conjunto arbitrario de puntos, y luego el mismo conjunto de puntos girados en cierto grado, ¿alguien sabe de algún algoritmo para calcular/estimar dónde está el centro de la rotación? ? ¿O un área de estudio donde se necesitan estos tipos de algoritmos? Tengo problemas para encontrar información relevante.Encontrar centro de rotación para un conjunto de puntos

Gracias

+0

La Tierra _ gira_ en su eje. Se revoluciona alrededor del sol. ¿A qué te refieres? –

+0

¿La correspondencia entre los puntos es conocida? – nav

+0

Esta pregunta parece estar fuera de tema porque se trata de matemáticas, no de programación. – bmargulies

Respuesta

9

Digamos que tiene un punto (x, y), que se trasladó a (x 'y').

Luego el centro de rotación debe estar en la línea que es perpendicular a (x, y) - (x ', y'), y que interseca el centro (x, y) - (x ', y') .

Ahora tome otro punto, (x2, y2), que se movió a (x'2, y'2). Esto también da lugar a una línea sobre la cual debe ubicarse el centro de rotación.

Ahora tome estas dos líneas y calcule la intersección. Ahí tienes el centro de rotación.


Actualización: Si no tiene la correspondencia de cada punto, no debería ser demasiado difícil de descifrar. Aquí hay una sugerencia desde lo alto de mi cabeza: Encuentra el centro de masa de los puntos "anteriores". Ordena los puntos según su distancia desde este punto. Ahora haz lo mismo con los puntos "después". El orden de los dos conjuntos ahora debe coincidir. (El punto más cercano al centro de la masa antes de rotación, debe ser el punto más cercano al centro de masa después de la rotación.)

+0

este algoritmo es bueno cuando conoce la relación entre los puntos. en dos artículos diferentes. –

+0

Ese es un buen proceso si entiende la correlación entre los puntos, es decir, si están etiquetados, pero si son arbitrarios de antemano y después, la pregunta se vuelve mucho más difícil (debido al problema de identidad, ¿cómo se identifica que un el punto es el mismo antes y después de la rotación?). –

+0

¿Quién dice que no? E incluso si él no tiene esta relación, necesita resolverlo antes de resolver el problema completo, y desde el punto en que * lo * resolvió, este algoritmo lo ayudará. – aioobe

1

problema muy interesante. Mi conocimiento sobre esto está un poco desactualizado, pero, como recuerdo, hay algo de investigación en el uso del análisis de subgrafos sobre esto; es decir, caracterizar las subsecciones del conjunto de puntos por las distancias entre los puntos y las variaciones en el mismo, y luego correlacionar los análisis del subgráfico entre las rotaciones antes y después.

Esto es, por supuesto, asumiendo un conjunto muy complejo de puntos con una distribución no uniforme.

3

Sería una locura exagerada para este tipo de problema, pero creo que la funcionalidad del generalized Hough transform para la detección de objetos abarca al menos lo que desea, incluso si no está diseñado para este propósito.

Dada una forma arbitraria creada a partir de un conjunto de puntos, y otro conjunto arbitrario de puntos, trata de encontrar la forma en el conjunto de puntos aunque haya sido rotado, escalado y traducido. Es posible que pueda eliminar la escala y la traducción y obtener lo que desea.

Básicamente, lo que se reduciría sería forzar brutales los posibles puntos de rotación para ver cuál encaja mejor en el segundo conjunto de puntos.

0

Debe encontrar alguna firma en su conjunto de datos que permita identificar los puntos del primer conjunto (A) con los del segundo conjunto (B).

Una forma sencilla es la siguiente:

  • Por cada elemento E en A, encontrar los dos puntos más cercanos (N1, N2) y calcular el ángulo entre N1, E, N2 resultando en tres valores: el ángulo y las distancias de E a N1 y N2 (ang, d1, d2).

  • Encuentra 3 puntos en A con tuplas únicas (ang, d1, d2).

  • Para cada elemento en B calcule también la distancia a sus dos vecinos más cercanos y el ángulo. Encuentre los 3 puntos que coincidan con los seleccionados de A.

  • El cálculo de la rotación es solo una cuestión de análisis geométrico.

actualización: se necesitan 3 puntos para determinar la rotación en el espacio 3D. En 2D, dos funcionarán.

actualización 2: como otros han comentado en otras publicaciones, puede haber simetrías en A que podrían detenerte para encontrar las 3 tripletas únicas para (ang, d1, d2). En ese caso, para cada uno de los tres puntos seleccionados en A, tendrá que realizar una búsqueda sobre todos los elementos en B que coincidan con sus trillizos hasta que una combinación dé como resultado una rotación que funcione para todos los elementos en A.

Cuestiones relacionadas