2012-11-11 56 views
3

我想弄清楚公式來獲得兩個對象之間在3D空間中的距離。到目前爲止,當我運行該程序時,答案是錯誤的:找出3d空間中兩個對象的公式

float Distance3D(const float & object1X , 
      const float & object1Y , 
      const float & object1Z , 
      const float & object2X , 
      const float & object2Y , 
      const float & object2Z) 
{ 
    float x = pow ((object2X - object1X),2);// for x 
    float y = pow ((object2Y - object1Y),2);// for y 
    float z = pow ((object2Z - object1Z),2);// for z 
    float objectDistance = 0.0f; 

    objectDistance = sqrt(object2X*object1X + object2Y*object1Y + object2Z*object1Z); 
    cout << objectDistance << endl; 

    return objectDistance; 
} 
+3

您開始正確,但完全放棄它。如果你從不在後面的代碼中使用它們,你爲什麼要計算'x','y'和'z'?你正確地計算了'x','y'和'z'。現在繼續使用'x','y'和'z'來獲得距離。 – AnT

+0

我想表達我對你的數學老師的不滿。 – Mikhail

回答

0

您的公式不正確;看看the 2D distance formula,然後將其擴展到3D。

另請注意與獲取2D/3D矢量長度的公式的相似之處。

2

如果你想在3D空間中的2點之間的歐幾里得距離你的代碼應該看起來更像

objectDistance = sqrt((object2X-object1X)*(object2X-object1X) + 
         (object2Y-object1Y)*(object2Y-object1Y) + 
         (object2Z-object1Z)*(object2Z-object1Z)); 

或者更簡單地使用你的平方距離變量x,y,z

objectDistance = sqrt(x + y + z); 
+0

「x」,「y」和「z」已經平方。你不需要再把它們放平。 – AnT

+0

@AndreyT謝謝你指出。我在編輯問題後才添加它們 – mathematician1975

0

你應該嘗試每個組件差異平方的平方根。見formula

1

距離通常使用Pythagorean Theorem找到。

此公式是

d^2=(x0-x1)^2+(y0-y1)^2+(z0-z1)^2 

其中d是點之間的距離。

使用該公式,您的代碼應如下所示

float Distance3D(const float & object1X , 
      const float & object1Y , 
      const float & object1Z , 
      const float & object2X , 
      const float & object2Y , 
      const float & object2Z) 
{ 
    float delta_x = pow (object2X - object1X,2);// for x 
    float delta_y = pow (object2Y - object1Y,2);// for y 
    float delta_z = pow (object2Z - object1Z,2);// for z 
    float objectDistance = 0.0f; 

    objectDistance = sqrt(delta_x*delta_x + delta_y*delta_y + delta_z*delta_z); 
    cout << objectDistance << endl; 

    return objectDistance; 
} 

有趣的是,用於高維數據的該度量下降的有用性和Manhatten distance可以成爲優選的度量。已經寫了一篇題爲「關於高維空間中的距離度量的令人驚訝的行爲」的文章Aggarwal (2001)

相關問題