2012-10-21 66 views
1

我試圖將某些x和y速度值縮放到-MAX和MAX之間並保持它們的比例。數字可以是負數,零或正數。這被用來強制x和y速度的速度限制。這是我得到的:在C++中將x和y速度縮放到-MAX和MAX之間

if(abs(velocities.x) <= MAX_TRANSLATIONAL_VELOCITY && abs(velocities.y) <= MAX_TRANSLATIONAL_VELOCITY) 
    return; 

float higher = max(abs(velocities.x), abs(velocities.y)); 

velocities.x = (velocities.x/higher) * MAX_TRANSLATIONAL_VELOCITY; 
velocities.y = (velocities.y/higher) * MAX_TRANSLATIONAL_VELOCITY; 

這不是真的工作,我正在使用它的機器人是一種溫馴。有沒有一個標準的方法來完成這個?

謝謝。

+0

你的代碼看起來不錯... – alestanis

+1

你是什麼意思「沒有真正的工作」你得到了什麼?你期望什麼?另外 - 什麼是類型的字段'velocityoc.x和'velocity'y'? – amit

回答

2

要正常化一個矢量,你不應該將它的分量除以它們中的任何一個的最大值,而是將它的大小作爲矢量的euclidean norm

實際上,您不應該檢查單個組件,首先計算幅度,然後如果它超過MAX_MAGNITUDE,則將矢量歸一化並將其乘以MAX_MAGNITUDE。

float magnitude = sqrt(v.x*v.x + v.y*v.y); 

if (magnitude > MAX_MAGNITUDE) 
{ 
    v /= magnitude; // I'm assuming overloaded operators here 
    v *= MAX_MAGNITUDE; 
} 
+0

完美運作。我知道必須有更好的方法。謝謝! – breakspirit