2012-08-31 22 views
0

我在某個位置繪製了一個圓。我可以在速度設置爲10f的情況下移動它,但是當它開始循環時,它變得非常快。它顯然不動(單位/秒),我不知道發生了什麼。我認爲archSpeed需要弧度或其他東西,減慢它 - 但仍然不正確。 這裏的圓弧式,我立足關中:圓弧方程 - 理解速度?

s = r * theta 

下面是我使用的功能:

private void moveOut(double deltaTime) 
{ 
    SetPosition(x += direction * speed * deltaTime, y, 0); 

    if (x - (direction * GetWidth()/2f) >= centerX + radius + GetWidth()/2f) 
    { 
     //onOutside = true; 
    } 

    Log.d(TAG, "moving out"); 
} 

private void circleCenter(double deltaTime) 
{ 
    float angleSpeed = (float) (radius * (speed * Math.PI/180) * deltaTime); 
    currentAngle += angleSpeed; 

    if (currentAngle >= 2 * Math.PI) 
    { 
     currentAngle = (float) (2 * Math.PI - currentAngle); 
    } 

    SetPosition(centerX + radius * FloatMath.cos(currentAngle), centerY + radius * FloatMath.sin(currentAngle), 0); 
} 

回答

1

angleSpeed公式是錯誤的。

我會首先說出我在那段時間旅行的距離。你已經知道的答案是speed*deltaTime。現在你有了一段距離,你可以通過使用說明arclength = radius*angle的弧形論壇來計算出角度。所以angle = arclength/radius

把這兩個合力得到

angle = speed*deltaTime/radius 

這將是當然的弧度。從本質上講,這可以歸結爲你乘以半徑而不是被半徑劃分的事實(以單位來看它會幫助發現這一點,但這不在編程論壇的範圍之內)。

+0

好的,謝謝 - 應該包括單位。 –