Question

laissez-moi commencer par dire que je suis est terrible en maths.

Je tente de repositionner et faire pivoter un rectangle. cependant, i besoin de faire tourner le rectangle d'un point qui ne soit pas 0,0, mais en fonction de la mesure de ses coordonnées a changé. je suis sûr que cela ne fait pas beaucoup de sens, donc je l'ai fait quelques croquis pour expliquer ce que je dois.

l'image ci-dessus montre 3 étapes du rectangle rouge mobile de 0% à 100%. les coordonnées du rectangle rouge X et Y (en haut à gauche du rectangle rouge) se déplace seulement un pourcentage de la hauteur du rectangle bleu.

le rectangle rouge peut tourner. en se concentrant uniquement sur l'exemple du milieu ( « Distance -50% ») d'en haut, où le rectangle rouge est repositionné à -50 de la hauteur du rectangle bleu, son nouvel angle dans l'image ci-dessus est maintenant -45º. il a été mis en rotation à partir de son 0, le point 0.

maintenant, mon problème est que je veux son point de rotation pour refléter sa position.

rectangles rouges et bleus sont de la même taille, mais ont des largeurs et des hauteurs opposées. depuis le 0,0 Les coordonnées du rectangle rouge sont maintenant 50% de la hauteur du rectangle bleu, et comme ils ont des largeurs opposées et des hauteurs, je veux le point de rotation soit 50% de la largeur du rectangle rouge (ou 50% des années de rectangle bleu hauteur, ce qui est la même chose).

plutôt que de dire précisément le rectangle rouge pour tourner à 50% de sa largeur, afin de faire ce que je veux, je dois imiter le faire en utilisant une formule qui positionnera les coordonnées X et Y du rectangle rouge de sorte que son le point de rotation reflète sa position.

Était-ce utile?

La solution

Voici une solution illustrée à votre problème:

Procédé de détermination de deltas de position à partir d'une rotation excentrée.

Autres conseils

Il est vraiment très simple.

1. de Settle Let sur votre point que vous voulez faire pivoter le rectangle d'environ, soit le point de rotation ( RP ) qui ne se déplace pas lorsque vous faites pivoter votre autour rectangle . Supposons que le point est représenté par le diamant dans la figure ci-dessous.

text alt

2. Traduire les 4 points de telle sorte que RP est à (0,0) . Supposons que les coordonnées de ce point est (RP x , RP y ) , donc soustraire l'ensemble des 4 coins du rectangle par ces coordonnées.

text alt

3. tourner les points avec une (qui fait tourner un sens anti-horaire du point autour de l'origine à travers un certain angle qui est maintenant le point de rotation grâce à la traduction précédente):

text alt

La figure suivante montre le rectangle tourné de 45 ° dans le sens antihoraire.

text alt

4 Traduire le dos du rectangle (en ajoutant RP pour tous les 4 points).: text alt

Je suppose que c'est ce que vous voulez:)

Je ne comprends pas exactement ce dont vous avez besoin, mais il semble qu'une procédure pour faire tourner un rectangle autour d'un point arbitraire peut aider.

Supposons que nous voulons tourner un point (x, y) d radians autour de l'origine (0,0). La formule de l'emplacement du point en rotation est:

x' = x*cos(d) - y*sin(d)
y' = x*sin(d) + y*cos(d)

Maintenant, nous ne voulons pas tourner autour de l'origine, mais autour d'un point donné (a, b). Ce que nous faisons est d'abord déplacer l'origine (a, b), puis appliquer la formule de rotation ci-dessus, puis déplacez l'arrière d'origine (0,0).

x' = (x-a)*cos(d) - (y-b)*sin(d) + a
y' = (x-a)*sin(d) + (y-b)*cos(d) + b

Ceci est votre formule pour faire tourner un point (x, y) d radians autour du point (a, b).

Pour votre problème (a, b) serait le point à mi-chemin sur le côté droit du rectangle bleu, et (x, y) serait tous les coins du rectangle rouge. La formule donne (x «y ») pour les coordonnées des coins du rectangle rouge rotation.

Il semble que vous pourriez éviter une rotation plus complexe par plus rusés positionnement initial? Par exemple, dans le dernier exemple, la position de la boîte rouge « -25% bleu Hauteur » et « -25% Rouge Taille » - si je suis votre schéma de référencement - puis effectuer la rotation que vous voulez

.

Si vous connaissez l'origine O et un point P sur le côté du rectangle tourné, vous pouvez calculer le vecteur entre les deux:


(source: equationsheet.com )

Vous pouvez obtenir l'angle entre le vecteur et l'axe des x en prenant le produit scalaire avec ce vecteur:


(source: equationsheet.com )

Compte tenu de cela, vous pouvez transformer tout point du rectangle en multipliant par une matrice de rotation:


(source: equationsheet.com )

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top