Как определить, движется ли мышь по часовой стрелке или против часовой стрелки? - PullRequest
3 голосов
/ 16 марта 2009

У меня есть приложение MFC, в котором пользователь должен перемещать мышь по окружности с помощью перетаскивания. Мне нужно получить количество градусов во время «вращения» перетаскивания мышью, и мне нужно знать, по часовой стрелке или против часовой стрелки.

Сначала, чтобы определить направление вращения, я сравнивал координату x между текущей позицией мыши и позицией мыши, где пользователь щелкнул, чтобы начать перетаскивание. Это работает хорошо, пока пользователь не поворачивается на 180 градусов.

Как мне справиться с другой половиной круга?

Ответы [ 3 ]

6 голосов
/ 16 марта 2009

Вам понадобится не менее трех упорядоченных точек, чтобы определить, движется ли кто-то по часовой или против часовой стрелки с течением времени. Только с двумя точками неясно, повернул ли (например) кто-то на 90 градусов или -270 градусов. Так что простое получение перекрестного произведения начала и конца не сработает.

Попробуйте выполнить выборку мыши во время перетаскивания, чтобы получить дополнительную информацию, которая вам нужна, а затем взять дополнительные перекрестные произведения между каждой парой последовательных точек. Это скажет вам, что вы хотите знать. Тем не менее, вам нужно сэмплировать достаточно быстро, чтобы не могло произойти вращение более чем на 180 градусов ; в противном случае вы снова окажетесь в неоднозначной ситуации.

3 голосов
/ 16 марта 2009

Это может вам помочь.

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

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

А вот простой пример распознавания жестов (это во флэш-памяти, но идея важна)

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

1 голос
/ 16 марта 2009

Читать о кросс продукт . Вычисление перекрестного произведения между векторами X и Y (отличия от начальной точки) всегда будет надежно определять направление вращения.

...