4

我有一个 MFC 应用程序,用户必须在一个带有拖动运动的圆圈周围移动鼠标。我需要在鼠标拖动“旋转”期间检索度数,我需要知道它是顺时针还是逆时针。

起初,为了确定旋转方向,我比较了当前鼠标位置和用户单击以启动拖动的鼠标位置之间的 x 坐标。在用户旋转超过 180 度之前效果很好。

我该如何处理圆的另一半?

4

3 回答 3

6

您需要至少三个有序点来确定某人随着时间的推移是顺时针还是逆时针移动。只有两点,(例如)某人是否旋转 90 度或 -270 度并不明显。所以简单地取开始和结束的叉积是行不通的。

尝试在拖动过程中对鼠标进行采样以获得所需的附加信息,然后在每对连续点之间进行增量叉积。这会告诉你你想知道什么。但是,您需要足够快地进行采样,以免发生超过 180 度的旋转;否则你会再次陷入模棱两可的境地。

于 2009-03-16T03:40:55.470 回答
3

这些可能会对你有所帮助。

http://en.wikipedia.org/wiki/Atan2

http://www.phy.syr.edu/courses/java-suite/crosspro.html

这是一个识别手势的简单示例(它在闪存中,但想法很重要)

http://www.bytearray.org/?p=91

于 2009-03-16T03:42:17.650 回答
1

阅读有关交叉产品的信息。计算 X 和 Y 向量之间的叉积(与起点的差异)将始终可靠地给出旋转方向。

于 2009-03-16T03:39:27.580 回答