¿Cómo convierto del espacio de coordenadas global a un espacio local?

13

Dada una entidad llamada EntityA, quiero definir un espacio de coordenadas local, donde la posición de EntityAes el origen, su vector de rumbo es el eje X, y la normal del vector de rumbo es el eje Y:

descripción pictórica de la misma

Dadas sus coordenadas globales, ¿cómo encuentro la posición de otra entidad en EntityAel espacio local?

Un ejemplo: EntityAla posición global de (50,50) y la de EntityB(80,90). ¿Cuál es entonces la posición del espacio local de EntityBin EntityA?

EDITAR: Por favor, vaya fácil en las matemáticas.

Aviv Cohn
fuente

Respuestas:

21

Bien, suponiendo que sabes cuál es la matriz de Transformación Mundial para ese objeto A, solo necesitas construir el inverso de esa matriz y tendrás lo que necesitas.

Suponga que las matrices de rotación, escala y traslación del objeto A utilizadas para llevarlo al Espacio Global son R , S y T, respectivamente. Multiplicarás estos juntos como

S * R * T = W

Ahora, toma W y encuentra su inverso W ^ -1 de alguna manera. La inversa de una matriz es esa matriz que hace exactamente lo contrario. El producto de la matriz con su inverso es siempre la matriz de identidad.

W * W ^ -1 = I

así W ^ -1 = I / W ;

Ahora aplique esta matriz inversa como la transformación del mundo a la escena y cada objeto estará en las coordenadas que desea.

Para la multiplicación de matrices, vea esta página. Para la matriz de identidad, vea esto.

Aquí hay otra página que le da las matrices que se necesitan para hacer W .

En la pregunta anterior, debe tomar la traducción en el eje x como 50, la traducción en el eje y como 50, sin escala en ninguno de los ejes y una rotación que no haya especificado.

The Light Spark
fuente
Gracias por la respuesta, pero en realidad no entiendo mucho de esto. No muy bien con las matemáticas. Con es una matriz? ¿Qué quiere decir con 'matrices de rotación, escala y traducción'?
Aviv Cohn
Una matriz es una forma muy compacta de representar un conjunto de números u objetos interrelacionados. En gráficos por computadora, se utilizan ampliamente para hacer cálculos. revise el último enlace en la respuesta para saber a qué me refiero con traducción de rotación y matrices de escala. Sí, tendrá que leer todo eso. De lo contrario, puede usar el método de ashes999 para resolver su problema, pero eso no tendrá en cuenta la rotación y el escalado de EntityA, si lo hay.
The Light Spark
9

He hecho esto con trigonometría en lugar de matrices en el pasado (soy un novato de matriz). La respuesta de Ashes999 está a mitad de camino, obtenga el vector relativo, luego gírelo por el inverso del ángulo de la entidad A.

   relativeX = B.x - A.x
   relativeY = B.y - A.y
   rotatedX = Cos(-Angle) * relativeX - Sin(-Angle) * relativeY
   rotatedY = Cos(-Angle) * relativeY + Sin(-Angle) * relativeX
Elliot
fuente
2
+1 Trigonometría mucho más intuitiva y más fácil de usar que las matrices.
Ramchandra Apte
¿Qué hay de la escala? ¿Cuándo lo aplicas?
Llamageddon
Lo siento, significaba rotación.
Llamageddon
6

Permítame intentar darle algo en algún punto entre la respuesta de The Light Spark y la respuesta de Elliot, porque por lo que leí, realmente está buscando un algoritmo a seguir y no solo matemáticas lanzadas a usted.

Declaración del problema: dado que tiene una ubicación A (50, 50)y un encabezado (ya que no proporcionó uno, lo afirmaré como y = 2 * x + 25), busque dónde B (80, 90)está relativo Ay el encabezado.

Lo que quieres hacer es bastante sencillo. 1) Vuelva Aa ubicar el origen de su sistema. Esto simplemente significa que los Avalores locales a serán los valores de posición global menos los valores de posición global de A. Ase vuelve (0, 0)y se Bvuelve (30, 40).

1.1) El encabezado también necesita ser movido. Esto es realmente muy fácil de hacer, porque la intersección en y en Atérminos locales siempre es 0, y la pendiente no cambiará, por lo que tenemos y = 2 * xcomo encabezado.

2) Ahora necesitamos alinear el rumbo anterior al eje X. ¿Entonces como hacemos esto? La manera más fácil, conceptualmente de hacer esto es convertir de coordenadas x, y a un sistema de coordenadas polares. El sistema de coordenadas polares implica Rla distancia a una ubicación y phiun ángulo de rotación desde el eje x. Rse define como sqrt(x^2 + y^2)y phise define como atan(y / x). En la actualidad, la mayoría de los lenguajes de computadora definen una atan2(y, x)función que hace exactamente lo mismo atan(y/x)pero de tal manera que la salida tiende a ser de -180 grados a 180 grados en lugar de 0 grados a 360 grados, pero funciona.

Basí se convierte R = sqrt(30^2 + 40^2) = sqrt(2500) = 50, y phi = atan2(40, 30) = 53.13en grados.

Del mismo modo, el título ahora cambia. Esto es un poco complicado de explicar, pero debido a que el encabezado, por definición, siempre pasa por nuestro origen A, no debemos preocuparnos por el Rcomponente. Los encabezados siempre tendrán la forma de phi = Cdónde Ces una constante. En este caso, phi = atan(2 * x / x) = atan(2) = 63.435grados.

Ahora, podemos rotar el sistema para mover el rumbo al eje X del Asistema local . Al igual que cuando nos mudamos Aal origen del sistema, todo lo que tenemos que hacer es restar phiel encabezado de todos los phivalores del sistema. Entonces el phide se Bconvierte en 53.13 - 63.435 = -10.305grados.

Finalmente, tenemos que volver a convertir las coordenadas polares en coordenadas x, y. La fórmula para hacer esa transformación son X = R * cos(phi)y Y = R * sin(phi). Por lo Btanto, obtenemos X = 50 * cos(-10.305) = 49.2y Y = 50 * sin(-10.305) = 8.9, por lo tanto, Ben las Acoordenadas locales está cerca (49,9).

Esperemos que eso ayude, y que sea lo suficientemente ligero en matemáticas para que pueda seguirlo.

Brian Drozd
fuente
1

Debe conocer la pose de la entidad A en el espacio global (x1, y1, θ), donde θ es la orientación relativa al eje x.

Para convertir la ubicación de EntityB de una coordenada global (x2, y2) a una coordenada local (x2 ', y2'):


  1. Usando expresiones

Global a local

x2' = (x2-x1)cosθ + (y2-y1)sinθ

y2' = -(x2-x1)sinθ + (y2-y1)cosθ

Local a global

x2 = x2'cosθ - y2'sinθ + x1

y2 = x2'sinθ + y2'cosθ + y1

  1. Usando matrices:

    R = [cosθ   -sinθ
    
         sinθ    cosθ]
    
    A = [x1
         y1]
    
    B_global = [x2
                y2]
    
    B_local = [x2' 
               y2']

Global a local

    B_local = inv(R) x (B_global - A)

Local a global

    B_global = R x B_local + A
Nino Pereira
fuente
-2

En pocas palabras, la entidad B necesitaría una referencia a la entidad A. Luego, necesitaría obtener la diferencia entre la posición A de la entidad y la posición de la entidad B.

Lucas
fuente
3
No entiendo cómo esto responde la pregunta.
Anko