C ++: rotation d'un vecteur autour d'un certain point
Je suis en train de tourner un vecteur autour d'un certain point sur le vecteur(en C++):
1 2 3
4 5 6
7 8 9
rotation autour du point (1,1) (qui est le "5") de 90 degrés dans
7 4 1
8 5 2
9 6 3
Droit maintenant, je suis en utilisant:
x = (x * cos(90)) - (y * sin(90))
y = (y * cos(90)) + (x * sin(90))
Mais je ne veux pas d'elle une rotation autour de (0,0)
source d'informationauteur Erik Ahlswede
Vous devez vous connecter pour publier un commentaire.
Comme Mehrdad Afshari a commenté sur Pesto'emploi, y compris la traduction de retour dans le système de coordonnées d'origine serait:
La solution est de traduire le vecteur d'un système de coordonnées dans lequel le centre de rotation de l'est (0,0). Appliquer la matrice de rotation et de traduire le vecteur de retour à l'origine du système de coordonnées.
En supposant que vous êtes à l'aide d'un vecteur de mise en oeuvre (0,0) correspond au coin en haut à gauche et vous êtes à la rotation autour du point (x_origin, y_origin), cela devrait le faire:
Remarque que y sont
y_origin - y
parce que la valeur de y augmente à mesure que vous descendez.Vous aurez besoin d'utiliser un traduction de la matrice pour déplacer tourner autour d'un point différent.
J'ai trouvé la réponse de Marc Stand d'être mauvais (rotate (0,1,0) par 0 degrés et vous obtenez (0,-1,0) avec sa formule), et j'ai fini avec:
Ceci peut être encore simplifiée bien sûr, mais je veux le rendre aussi simple que possible.