我有一个MFC应用程序,用户必须使用拖动的方式将鼠标移动到圆形会议周围。我需要在鼠标拖动“旋转”期间检索度数,我需要知道它是顺时针还是逆时针。
首先,为了确定旋转方向,我正在比较当前鼠标位置和用户单击以启动拖动的鼠标位置之间的x-coordinnate。这很有效,直到用户旋转超过180度。
如何处理圆圈的另一半?
答案 0 :(得分:6)
您需要至少三个有序点,以确定某人是否正在顺时针或逆时针移动。只有两点,(例如)某人是否旋转了90度或-270度并不明显。因此,简单地选择开始和结束的交叉产品是行不通的。
在拖动过程中尝试对鼠标进行采样,以获取所需的其他信息,然后在每对连续点之间采用增量交叉积。那会告诉你你想知道什么。但是,您需要足够快地采样不会发生超过180度的旋转;否则你会再次陷入模棱两可的境地。
答案 1 :(得分:3)
这些可能对你有帮助。
http://en.wikipedia.org/wiki/Atan2
http://www.phy.syr.edu/courses/java-suite/crosspro.html
这是一个识别手势的简单例子(它在闪存中,但这个想法很重要)
答案 2 :(得分:1)
了解cross products。计算X和Y向量之间的叉积(与起点的差异)将始终可靠地给出旋转方向。