2D Euclidienne du vecteur rotations
J'ai un euclidienne du vecteur a
assis au coordonnées (0, 1)
.
Je veux faire tourner a
de 90 ° (sens horaire) autour de l'origine: (0, 0)
.
Si j'ai une bonne compréhension de la façon dont cela devrait fonctionner, la résultante de (x, y) les coordonnées après la rotation doit être (1, 0)
.
Si je devais le faire pivoter de 45 degrés (toujours dans le sens horaire) à la place, je me serais attendu à la résultante des coordonnées pour être (0.707, 0.707)
.
theta = deg2rad(angle);
cs = cos(theta);
sn = sin(theta);
x = x * cs - y * sn;
y = x * sn + y * cs;
L'aide du code ci-dessus, avec un angle
valeur de 90,0 degrés, la résultante de coordonnées sont: (-1, 1)
.
Et je suis tellement confus.
Les exemples dans les liens suivants représentent la même formule ci-dessus, dites-vous?
Qu'ai-je fait de mal?
Ou ai-je mal compris la façon dont un vecteur est d'être tourné?
- Quels sont les types de toutes les variables?
- doubles, mais la réponse est assez simple, grâce à Caspar.
- Aussi - n'est-ce pas dans le sens antihoraire?
Vous devez vous connecter pour publier un commentaire.
vous devez supprimer les vars à partir de la fonction:
créer de nouvelles coordonnées devient, pour éviter le calcul de x avant qu'il n'atteigne la deuxième ligne:
La rotation d'un vecteur de 90 degrés est particulièrement simple.
(x, y)
rotation de 90 degrés autour de(0, 0)
est(-y, x)
.Si vous souhaitez faire pivoter dans le sens horaire, il vous suffit de le faire dans l'autre sens, se
(y, -x)
.(-y, x)
est dans le sens horaire et(y, -x)
est dans le sens antihoraire.Rotation de 90 degrés autour de 0,0:
Rotation de 90 degrés autour de px,py:
Semble plus facile à faire avec les classes standard:
Vecteur rotation est un sous-ensemble de multiplications complexes. Pour faire pivoter sur un angle
alpha
, vous multipliez parstd::complex<double> { cos(alpha), sin(alpha) }
r45
sont pré-calculées.Vous êtes le calcul de l'axe de coordonnées basé sur le "nouveau" x-partie de la nouvelle coordonnée. En gros, cela signifie que votre calcul de la nouvelle sortie dans les termes de la nouvelle sortie...
Essayer de réécrire en termes d'entrée et de sortie:
Ensuite, vous pouvez faire ceci:
Notez comment le choix des noms de variables pouvez éviter ce problème en tout!