D'accord, donc en supposant que vous savez ce qu'est la matrice de transformation mondiale pour cet objet A, il vous suffit de construire l'inverse de cette matrice et vous aurez ce dont vous avez besoin.
Supposons que la rotation, mise à l' échelle et des matrices de traduction objet A utilisé pour l' obtenir à Global espace sont R , S et T respectivement. Vous les multiplierez comme
S * R * T = W
Maintenant, prenez W et trouvez son inverse W ^ -1 en quelque sorte. L'inverse d'une matrice est cette matrice qui fait exactement le contraire. Le produit de la matrice avec son inverse est toujours la matrice d'identité.
W * W ^ -1 = I
ainsi W ^ -1 = I / W ;
Maintenant, appliquez cette matrice inverse comme transformation du monde à la scène et chaque objet sera dans les coordonnées que vous vouliez.
Pour la multiplication matricielle, voir Cette page.
Pour la matrice d'identité, voir ceci.
Voici une autre page qui vous donne les matrices dont vous auriez besoin de faire W .
Dans la question ci-dessus, vous devez prendre la traduction dans l'axe des x à 50, la traduction dans l'axe des y à 50, aucune mise à l'échelle dans aucun des axes et une rotation que vous n'avez pas spécifiée.
The Light Spark
la source
J'ai fait cela avec de la trigonométrie plutôt qu'avec des matrices dans le passé (je suis un noob matriciel). La réponse d'Ashes999 est à mi-chemin, obtenez le vecteur relatif, puis faites-le pivoter par l'inverse de l'angle de l'entité A.
la source
Permettez-moi d'essayer de vous donner quelque chose entre la réponse de The Light Spark et la réponse d'Elliot, car d'après ce que j'ai lu, vous cherchez vraiment un algorithme à suivre et pas seulement des maths.
Énoncé du problème: Étant donné que vous avez un emplacement
A (50, 50)
et un en-tête (puisque vous n'en avez pas fourni un, je l'affirmey = 2 * x + 25
), recherchez oùB (80, 90)
est relatifA
et l'en-tête.Ce que vous voulez faire est en fait assez simple. 1) Relocalisez-vous
A
à l'origine de votre système. Cela signifie simplement que lesA
valeurs locales vont être les valeurs de position globale moins les valeurs de position globale deA
.A
devient(0, 0)
etB
devient(30, 40)
.1.1) La rubrique doit également être déplacée. C'est en fait très facile à faire, car l'ordonnée à l'origine en
A
termes locaux est toujours 0, et la pente ne changera pas, nous avons doncy = 2 * x
comme en-tête.2) Maintenant, nous devons aligner le cap précédent sur l'axe X. Alors, comment faisons-nous cela? La manière la plus simple, conceptuellement, de le faire est de convertir des coordonnées x, y en un système de coordonnées polaires. Le système de coordonnées polaires implique
R
la distance à un emplacement etphi
un angle de rotation par rapport à l'axe des x.R
est défini commesqrt(x^2 + y^2)
etphi
est défini commeatan(y / x)
. De nos jours, la plupart des langages informatiques vont de l'avant et définissent uneatan2(y, x)
fonction qui fait exactement la même choseatan(y/x)
mais le fait de telle sorte que la sortie a tendance à être de -180 degrés à 180 degrés plutôt que de 0 degrés à 360 degrés, mais les deux fonctionnent.B
devient ainsiR = sqrt(30^2 + 40^2) = sqrt(2500) = 50
, etphi = atan2(40, 30) = 53.13
en degrés.De même, le titre change maintenant. C'est un peu compliqué à expliquer, mais parce que l'en-tête, par définition, passe toujours par notre origine
A
, nous n'avons pas à nous inquiéter duR
composant. Les titres seront toujours sous la forme dephi = C
oùC
est une constante. Dans ce cas,phi = atan(2 * x / x) = atan(2) = 63.435
degrés.Maintenant, nous pouvons faire pivoter le système pour déplacer le cap vers l'axe X du
A
système local vers . Tout comme lorsque nous sommes passésA
à l'origine du système, tout ce que nous avons à faire est de soustrairephi
le titre de toutes lesphi
valeurs du système. Ainsi , lephi
deB
devient53.13 - 63.435 = -10.305
degrés.Enfin, nous devons reconvertir les coordonnées polaires en coordonnées x, y. La formule pour effectuer cette transformation est
X = R * cos(phi)
etY = R * sin(phi)
. ParB
conséquent, nous obtenonsX = 50 * cos(-10.305) = 49.2
etY = 50 * sin(-10.305) = 8.9
, doncB
en local-àA
-coordonnées est proche de(49,9)
.J'espère que cela aide et est assez léger pour que vous puissiez suivre les calculs.
la source
Vous devez connaître la pose de l'entité A dans l'espace global (x1, y1, θ), où θ est l'orientation par rapport à l'axe x.
Pour convertir l'emplacement EntityB d'une coordonnée globale (x2, y2) en coordonnée locale (x2 ', y2'):
Du mondial au local
Du local au global
Utilisation de matrices:
Du mondial au local
Du local au global
la source
Pour le dire simplement, l'entité B aurait besoin d'une référence à l'entité A. Vous auriez alors besoin de faire la différence entre la position A de l'entité et la position de l'entité B.
la source