2014-05-13 82 views
1

我正在使用actionscript 3中的moltitouch應用程序,我也將它移植到C#中,基本上,即時通訊工作在旋鈕上,可以用手指旋轉,我想實現是旋轉的順時針或逆時針我可以有連續的方向,而不是每次角度超過180我得到了一個方向反轉,任何提示?旋轉方向連續檢查

哪種方式可以檢測連續的旋轉方向?

這是我UDING檢測方向代碼:

private function findDirection(currentAngle : Number, targetAngle : Number) : int 
{ 
    currentAngle = refineAngle(currentAngle); 
    targetAngle = refineAngle(targetAngle); 

    if (targetAngle < 0) 
    { 
     targetAngle += (Math.PI * 2); 
    } 

    if (currentAngle < 0) 
    { 
     currentAngle += (Math.PI * 2); 
    } 

    if (targetAngle < currentAngle) 
    { 
     targetAngle += (Math.PI * 2); 
    } 

    if (targetAngle - currentAngle <= Math.PI) 
    { 
     return 1; 
    } 
    else 
    { 
     return -1; 
    } 
} 

private function refineAngle(angle : Number) : Number 
{ 
    return angle * Math.PI/180; 
} 
+0

'currentAngel'和'targetAngle'大於或等於0且小於360? –

+0

這些角度介於0和360之間 –

回答

0

也許這會有所幫助。變量continuousAngle將跟蹤所執行的總旋鈕轉動,即逆時針旋轉兩次旋鈕將使您到達720。然後順時針旋轉三圈,就可以回到-360。其他一切都應該很容易推導 - 限制最小值和最大值,使值環繞,縮放值例如爲每回合1或其他任何你想要的。

var lastAngle = 0; 

var continuousAngle = 0; 

function HandleDown(angle) 
{ 
    lastAngle = angle; 
} 

function HandleMove(angle) 
{ 
    // The orientation change in degrees of the knob since the last event with 
    // a range of [-180;+180). A positive value indicates counterclockwise, a 
    // negative value clockwise turning. 
    var change = (360 + angle - lastAngle) % 360; 

    if (change >= 180) 
    { 
     change -= 360; 
    } 

    // It may also be a good idea to not update continuousAngle if the absolute 
    // value of change is larger than say 10°, 20° or 40° because such large 
    // changes may indicate some kind of glitch like the user moving straight 
    // across the knob. But I am not sure and 20 is just a random guess. 
    if (Math.Abs(change) <= 20) 
    { 
     continuousAngle += change; 
    } 

    lastAngle = angle; 
} 

對於浮點數提醒可使用的Math.IEEEReminder代替餘運算符%來計算。鏈接的頁面還顯示如果您的語言無法使用此功能,請自行實施此功能。

+0

感謝您的時間,解決方案有點優雅,反正結果是一樣的,它的結果是每180更改一次,深度更深我需要有一個恆定的方向增量,這意味着旋轉ccw我有一個數字總是在增長,反之亦然,對此有何建議? –

+0

然後我可能誤解了你的參數。你從UI獲得什麼數據?每當它發生變化時,鼠標光標或手指的當前角度如何變化以及向下和向上的事件? –

+0

也許我不是很清楚,我對此表示歉意,從Ui我得到了指針(鼠標或觸摸)圍繞旋鈕中心的角度,這意味着一旦我點擊了我有一個startangle和teh連續,通過拖動currentAngle ,這兩個角度用於檢測連續旋轉:如果我點擊並旋轉旋鈕,在360度CCW之後,我應該獲得值0,1;這樣做CCW值是0,-1,希望我很清楚,謝謝你的關注:) –