2012-01-29 40 views
2

比方說,我有一個兩輪物體,每個輪子都有一個獨立的速度(分別爲左輪和右輪的輪速和輪胎速度分別爲lWheelV和rWheelV)。每個車輪的速度被限制在[-1,1]範圍內(即在-1和1之間)。具有兩個輪子速度的Java轉向物體

  • 如果lWheelV = 1 & rWheelV = 1時,對象向前移動
  • 如果lWheelV = -1 & rWheelV = 1時,對象左轉(逆時針)
  • 如果lWheelV = 0.5 & rWheelV = 1,對象將向前驅動,同時緩慢向左轉動
  • 如果lWheelV = -1 & rWheelV = -1,對象將向後移動。

這可能是更容易在下列圖像中可視化:

object motion diagram

做什麼數學,我需要來形容這樣的對象,更重要的是我怎麼能實現軟件,將複製此行爲在Java

+0

所要求的可視化,algorythm,或代碼? 你能更正式嗎? – Hurda 2012-01-29 22:21:58

+0

不可視化,找出新位置的算法/代碼。 – 2012-01-29 22:28:53

+0

對於那些投票結束,請理解這是一個真正的世界問題,經常發生在機器人和物理。如果沒有對支撐該系統的數學的深刻理解,這樣的系統並不是完全微不足道的。事實上,OP已經做出了一些努力來清楚地描述系統應該算在他的青睞 – 2012-01-30 00:03:17

回答

0

這要看一大堆的東西像車寬,FPS等..

然而,一些提示:

  • 要計算在一個幀車輛旋轉,你可以使用arctan函數。

    float leftWheel = 1.0f; 
    float rightWheel = 0.5f; 
    float vehicleWidth = 1.0f; 
    
    float diff = rightWheel - leftWheel; 
    float rotation = (float) Math.atan2(diff, vehicleWidth); 
    
  • ,以確定車輛將要沿其軸線移動的速度,使用:

    float speedAlongAxis = leftWheel + rightWheel; 
    speedAlongAxis *= 0.5f; 
    
  • 爲了通過在第一前端中計算出的角度旋轉所述車輛的軸:

    float axisX = ...; 
    float axisY = ...; 
    /* Make sure that the length of the vector (axisX, axisY) is 1 (which is 
    * called 'normalised') 
    */ 
    
    float x = axisX; 
    float y = axisY; 
    
    axisX = (float) (x * Math.cos(rotation) - y * Math.sin(rotation)); 
    axisY = (float) (x * Math.sin(rotation) + y * Math.cos(rotation)); 
    
  • 要通過軸移動車輛

  • 一個normalise()方法是這樣的:

    public float normalise() 
    { 
        float len = (float) Math.sqrt(x * x + y * y); 
        x /= len; 
        y /= len; 
        return len; 
    } 
    
+1

是不是應該是Math.atan2(diff,vehicleWidth); ? – 2012-01-29 22:52:04

+0

請注意,我不確定物理,但我認爲它會接近。這可能是一個開始。 – 2012-01-29 22:53:05

+0

@ConnerRuhl:是!改變。謝謝。 – 2012-01-29 22:53:35