2013-03-22 3 views
2

Я делаю программу обнаружения движения и хочу определить, движется ли человек рукой по часовой стрелке или против часовой стрелки. Кто-нибудь знает лучший способ сделать это? (Я кодирую в AS3, но любой ECMA-подобный код помог бы).Определить направление кругового движения

Я считаю, что один из способов заключается в том, чтобы определить, следует ли, например, левое право следовать за верхним или нижним верхом и т. Д. - есть ли лучший способ?

ответ

1

Если у Вас есть точка отсчета (0,0), вы можете попробовать изменение угла с течением времени:

var sprite:Sprite = new Sprite(); 
var samples:Array = []; 
setInterval(function(){ 
    var len = samples.push(Math.atan2(sprite.mouseY,sprite.mouseX)); 
    if (len >=2) { 
     if (samples[len-2]-samples[len-1] > 0) { 
      // clockwise 
     } else { 
      // counter-clockwise 
     } 
    } 
},1000/stage.frameRate); 

Ссылка является левой верхней части спрайта (или его естественный 0, 0 на atan2), поэтому этот фрагмент отображает координату мыши относительно спрайта.

Кроме того, чем больше образцов вы считаете (я только выборка 2 samples[len-2] и samples[len-1]), тем лучше решение для cw или ccw.

Наконец, и, что более важно, мой сценарий рассматривает отрицательные числа в расчетах радиан, он предполагает, что все положительно - для этого потребуется некоторое tweeking.

PS: Вы хотите очистить samples каждый раз, когда длина массива будет максимальной.

Мой сценарий неполный, и я бы приветствовал изменения, предложения и разработки. Я надеюсь, что это даст вам возможность подумать и поработать.