2 votos

Girar y transformar en un solo paso

Esto viene de un problema de programación de CodeAbbey, sin embargo, no puedo averiguar la fórmula matemática para resolver el problema. Dentro del problema aquí tenemos una gráfica, luego la misma gráfica después con todos los puntos DESPLAZADOS y ROTACIONADOS por una cantidad ambigua, con algunos saliéndose de la gráfica también, con solo UN punto que NO se sale de la gráfica no siguiendo el mismo patrón

Sé que hay una fórmula de rotación: $$\begin{bmatrix}x'\\y'\end{bmatrix} =\begin{bmatrix}\cos \theta &-\sin \theta \\\sin \theta &\cos \theta \end{bmatrix}\begin{bmatrix}x\\y\end{bmatrix}. $$ (del artículo de rotación de Wikipedia)

También sé que se puede resolver fácilmente la tranformación: Simplemente calcula el cambio dentro de la distancia...

Sin embargo, cuando se le da sólo la imagen del antes y el después de los puntos que existen después de la rotación y la transformación (en lugar de un paso a la vez), ¿cómo lo hago? ¿Introducir las distancias en la fórmula de rotación? ¿Adivinar y comprobar? ¿Hay una manera más fácil de hacerlo?

1voto

David K Puntos 19172

Dada cualquier traslación (desplazamiento) seguida de una rotación, se puede conseguir el mismo efecto utilizando sólo una rotación, aunque normalmente será una rotación alrededor de un centro diferente. (Si se combinan las transformaciones en el otro orden, rotación y luego traslación, tienen el mismo efecto que una mera rotación alrededor de otro centro).

Si puedes identificar las ubicaciones "antes" y "después" de dos puntos que sufren la misma transformación(es), y si conoces las coordenadas de esos puntos con suficiente precisión, puedes (normalmente) encontrar el centro y el ángulo de una rotación equivalente de la siguiente manera.

Halla la mediatriz del segmento de recta entre los lugares "antes" y "después" de uno de los puntos. El centro de la rotación está en esta recta. Ahora encuentra la mediatriz del segmento segmento entre las posiciones "antes" y "después" del otro punto. La intersección de las dos bisectrices es el centro de la rotación.

Ahora que tienes el centro de la rotación (combinada), puedes determinar el ángulo de rotación construyendo los segmentos desde el centro de rotación a las imágenes "antes" y "después" de un punto y midiendo los ángulos entre esos segmentos. Si el centro de la rotación es el punto $(h,k)$ y el ángulo es $\theta$ , la transformación completa se describe entonces mediante esta fórmula:

$$ \begin{bmatrix} x' \\ y' \end{bmatrix} = \begin{bmatrix} \cos \theta & -\sin \theta \\ \sin \theta & \cos \theta \end{bmatrix} \begin{bmatrix} x - h \\ y - k \end{bmatrix} + \begin{bmatrix} h \\ k \end{bmatrix}. $$

Si es realmente necesario encontrar una rotación alrededor de $(0,0)$ y una traducción que tienen este mismo efecto cuando una es seguida por la otra, se pueden obtener mediante un poco de álgebra. (La respuesta exacta depende de si quieres que la traslación ocurra antes o después de la rotación).

Esto no funciona cuando se eligen dos puntos de tal manera que ambos pares de ubicaciones "antes" y "después" tienen la misma bisectriz perpendicular. En ese caso no se encuentra el centro de la rotación, sino una línea sobre la que se encuentra. Si las líneas son distintas pero el ángulo entre ellas es pequeño, teóricamente puedes encontrar el centro de la rotación pero cualquier imprecisión en las coordenadas de los puntos es probable que se magnifique. Una mejor elección son dos puntos cuyos "movimientos" son casi perpendiculares entre sí.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X