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.
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.
fuente
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é comoy = 2 * x + 25), busque dóndeB (80, 90)está relativoAy el encabezado.Lo que quieres hacer es bastante sencillo. 1) Vuelva
Aa ubicar el origen de su sistema. Esto simplemente significa que losAvalores locales a serán los valores de posición global menos los valores de posición global deA.Ase vuelve(0, 0)y seBvuelve(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 tenemosy = 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 yphiun ángulo de rotación desde el eje x.Rse define comosqrt(x^2 + y^2)yphise define comoatan(y / x). En la actualidad, la mayoría de los lenguajes de computadora definen unaatan2(y, x)función que hace exactamente lo mismoatan(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 convierteR = sqrt(30^2 + 40^2) = sqrt(2500) = 50, yphi = 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 elRcomponente. Los encabezados siempre tendrán la forma dephi = CdóndeCes 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 mudamosAal origen del sistema, todo lo que tenemos que hacer es restarphiel encabezado de todos losphivalores del sistema. Entonces elphide seBconvierte en53.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)yY = R * sin(phi). Por loBtanto, obtenemosX = 50 * cos(-10.305) = 49.2yY = 50 * sin(-10.305) = 8.9, por lo tanto,Ben lasAcoordenadas locales está cerca(49,9).Esperemos que eso ayude, y que sea lo suficientemente ligero en matemáticas para que pueda seguirlo.
fuente
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'):
Global a local
Local a global
Usando matrices:
Global a local
Local a global
fuente
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.
fuente