我试图找出公式来获得三维空间中两个物体之间的距离。到目前为止,当我运行程序时答案是错误的:
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;
}
答案 0 :(得分: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);
答案 1 :(得分:2)
除非您对3-D空间中的两个点的距离感兴趣,否则您可能感兴趣的是Gilbert-Johnson-Keerthi distance algorithm。
答案 2 :(得分:1)
通常使用Pythagorean Theorem找到3D空间中的距离。
这个公式是
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)撰写了一篇题为“关于高维空间中距离度量的惊人行为”的论文。
答案 3 :(得分:0)
你的公式不正确;看看the 2D distance formula,然后将其扩展为3D。
还要注意与获取2D / 3D矢量长度的公式的相似性。
答案 4 :(得分:0)
你应该尝试每个组件差异的平方的平方根。见formula