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á relativoA
y el encabezado.Lo que quieres hacer es bastante sencillo. 1) Vuelva
A
a ubicar el origen de su sistema. Esto simplemente significa que losA
valores locales a serán los valores de posición global menos los valores de posición global deA
.A
se vuelve(0, 0)
y seB
vuelve(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
A
términos locales siempre es 0, y la pendiente no cambiará, por lo que tenemosy = 2 * x
como 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
R
la distancia a una ubicación yphi
un ángulo de rotación desde el eje x.R
se define comosqrt(x^2 + y^2)
yphi
se 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.B
así se convierteR = sqrt(30^2 + 40^2) = sqrt(2500) = 50
, yphi = atan2(40, 30) = 53.13
en 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 elR
componente. Los encabezados siempre tendrán la forma dephi = C
dóndeC
es una constante. En este caso,phi = atan(2 * x / x) = atan(2) = 63.435
grados.Ahora, podemos rotar el sistema para mover el rumbo al eje X del
A
sistema local . Al igual que cuando nos mudamosA
al origen del sistema, todo lo que tenemos que hacer es restarphi
el encabezado de todos losphi
valores del sistema. Entonces elphi
de seB
convierte en53.13 - 63.435 = -10.305
grados.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 loB
tanto, obtenemosX = 50 * cos(-10.305) = 49.2
yY = 50 * sin(-10.305) = 8.9
, por lo tanto,B
en lasA
coordenadas 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