2009-03-16 18 views
3

J'ai une application MFC où l'utilisateur doit déplacer la souris autour d'une circonférence de cercle avec un mouvement de traînée. J'ai besoin de récupérer le nombre de degrés pendant cette souris glisser "rotation" et j'ai besoin de savoir si c'est dans le sens horaire ou antihoraire. Dans un premier temps, pour déterminer le sens de rotation, je comparais x-coordinate entre la position actuelle de la souris et la position de la souris où l'utilisateur a cliqué pour lancer le glissement. Cela fonctionne bien jusqu'à ce que l'utilisateur tourne de plus de 180 degrés.Comment déterminer si la souris se déplace dans le sens horaire ou antihoraire?

Comment puis-je gérer l'autre moitié du cercle?

Répondre

1

En savoir plus sur cross products. Le calcul d'un produit croisé entre les vecteurs X et Y (différences par rapport au point de départ) donnera toujours de manière fiable le sens de rotation.

6

Vous aurez besoin de au moins trois points pour déterminer si quelqu'un se déplace dans le sens des aiguilles d'une montre ou dans le sens inverse des aiguilles d'une montre. Avec seulement deux points, il n'est pas évident de savoir si (par exemple) quelqu'un a tourné de 90 degrés ou -270 degrés. Donc, simplement prendre le produit croisé du début et de la fin ne fonctionnera pas. Essayez d'échantillonner la souris pendant le glissement pour obtenir les informations supplémentaires dont vous avez besoin, puis prenez des produits croisés incrémentaux entre chaque paire de points consécutifs. Cela vous dira ce que vous voulez savoir. Cependant, vous devrez échantillonner suffisamment rapidement pour que aucune rotation de plus de 180 degrés ne se soit produite; sinon vous vous retrouverez dans une situation ambiguë.