2013-10-11 61 views
0

我試圖以恆定速度將對象移動到目標位置(均由Vector3表示)。以恆定速度移動到某一點並不夠精確

設置:

destination = gkVector3(1.0f, 0.0f, 1.0f); 
myObj = gkVector3(0.0f, 0.0f, 0.0f); 
velocity = 0.1; 

循環:

gkVector3 direction = destination - myObj; 
myObj = myObj + direction * velocity; 

if(myObj == destination) { 
    gkPrintf("THE SAME!!!!"); 
} 

然後,我要檢查對象是否達到了它的目的。如果是,則會顯示一條消息。 速度設置爲1.0時,完全沒有問題;但是當我將速度設置爲0.1時,對象將永遠不會到達目的地,並且不會顯示消息。那麼,如何以恆定的速度將物體精確地移動到目的地?

* gkVector3代表OGRE3D的Vector3

回答

0

我認爲你應該閱讀一些關於浮點運算。一般來說,使用==來測試浮點數的平等是一個壞主意。有關在C++中比較浮點數的更多信息可以在這裏找到here

0

我認爲問題在於gkVector3使用浮點精度,你會得到一個舍入誤差(因爲0.1不能在二進制系統中精確測量)。這意味着myObj將不完全等於目標。它將會出現1e-16的錯誤。

一個解決方案是製作一個緩衝區。 示例:

epsilon = gkVector3(0.00000001f,0.00000001f,0.00000001f);

如果(ABS(MyObj中 - 目的地)< =小量)

其中abs()是絕對值

相關問題