Certo, supondo que você saiba qual é a matriz de Transformação Mundial para esse objeto A, basta construir o inverso dessa matriz e terá o que precisa.
Suponha que as matrizes de rotação, escala e conversão do objeto A usadas para levá-lo ao Espaço Global sejam R , S e T, respectivamente. Você os multiplicará juntos como
S * R * T = W
Agora, pegue W e encontre seu W ^ -1 inverso de alguma forma. O inverso de uma matriz é aquela matriz que faz exatamente o oposto. O produto da matriz com seu inverso é sempre a matriz de identidade.
W * W ^ -1 = I
portanto W ^ -1 = I / W ;
Agora aplique essa matriz inversa como a transformação do mundo na cena e cada objeto estará nas coordenadas que você queria.
Para multiplicação de matrizes, consulte Esta página.
Para matriz de identidade, veja isso.
Aqui está outra página que lhe dá as matrizes que você precisa para fazer W .
Na pergunta acima, você deve considerar a translação no eixo x como 50, a translação no eixo y como 50, sem redimensionamento nos dois eixos e uma rotação que você não especificou.
Eu fiz isso com trigonometria em vez de matrizes no passado (eu sou uma matriz noob). A resposta de Ashes999 está no meio do caminho, obtenha o vetor relativo e gire-o pelo inverso do ângulo da Entidade A.
fonte
Deixe-me tentar fornecer algo em algum lugar entre a resposta do The Light Spark e a resposta de Elliot, porque pelo que li, você está realmente procurando um algoritmo a seguir e não apenas a matemática lançada para você.
Declaração do problema: Como você possui um local
A (50, 50)
e um cabeçalho (como você não forneceu um, eu o afirmo comoy = 2 * x + 25
), descubra ondeB (80, 90)
é relativo aA
e o cabeçalho.O que você quer fazer é realmente bastante direto. 1) Realoque
A
para a origem do seu sistema. Isso significa simplesmente que osA
valores locais para valores serão os valores da posição global menos os valores da posição globalA
.A
torna(0, 0)
-B
se e torna - se(30, 40)
.1.1) O cabeçalho também precisa ser movido. Isso é realmente muito fácil de fazer, porque a interceptação em y em
A
termos locais é sempre 0 e a inclinação não muda, então temosy = 2 * x
como título.2) Agora precisamos alinhar o cabeçalho anterior ao eixo X. Então, como fazemos isso? Conceitualmente, a maneira mais fácil de fazer isso é converter de coordenadas x, y em um sistema de coordenadas polares. O sistema de coordenadas polares envolve
R
a distância de um local ephi
um ângulo de rotação do eixo x.R
é definido comosqrt(x^2 + y^2)
ephi
é definido comoatan(y / x)
. Atualmente, a maioria das linguagens de computador vai em frente e define umaatan2(y, x)
função que faz exatamente a mesma coisa,atan(y/x)
mas de tal maneira que a saída tende a ser de -180 graus a 180 graus, em vez de 0 a 360 graus, mas ambas funcionam.B
assim se tornaR = sqrt(30^2 + 40^2) = sqrt(2500) = 50
, ephi = atan2(40, 30) = 53.13
em graus.Da mesma forma, o título agora muda. Isso é um pouco complicado de explicar, mas como o título, por definição, sempre passa por nossa origem
A
, não precisamos nos preocupar com oR
componente. Os títulos sempre estarão na forma dephi = C
ondeC
é uma constante. Nesse caso,phi = atan(2 * x / x) = atan(2) = 63.435
graus.Agora, podemos girar o sistema para mover o cabeçalho para o eixo X do local para o
A
sistema. Assim como quando mudamosA
para a origem do sistema, tudo o que precisamos fazer é subtrairphi
o cabeçalho de todos osphi
valores no sistema. Então ophi
deB
se torna53.13 - 63.435 = -10.305
graus.Finalmente, temos que converter de volta as coordenadas polares em coordenadas x, y. A fórmula para fazer essa transformação é
X = R * cos(phi)
eY = R * sin(phi)
. PoisB
, portanto, temosX = 50 * cos(-10.305) = 49.2
eY = 50 * sin(-10.305) = 8.9
, portanto,B
nasA
coordenadas locais está próximo(49,9)
.Espero que isso ajude e seja leve o suficiente na matemática para você seguir.
fonte
Você precisa conhecer a pose da Entidade A no espaço global (x1, y1, θ), onde θ é a orientação relativa ao eixo x.
Para converter o local da EntityB de uma coordenada global (x2, y2) em uma coordenada local (x2 ', y2'):
Global para Local
Local para Global
Usando matrizes:
Global para Local
Local para Global
fonte
Em outras palavras, a entidade B precisaria de uma referência à entidade A. Você precisaria obter a diferença entre a posição A da entidade e a posição da entidade B.
fonte