Определить направление кругового движения

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

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


person Cerulean    schedule 22.03.2013    source источник


Ответы (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.

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

PS: вам нужно время от времени очищать samples, так как длина массива будет максимальной.

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

person zamnuts    schedule 23.03.2013