3

我试图找出公式来获得 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;
}
4

5 回答 5

2

除非您只对3-D 空间中两点的距离感兴趣,否则您可能会感兴趣的是Gilbert-Johnson-Keerthi 距离算法

于 2012-11-11T23:29:53.630 回答
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);
于 2012-11-11T23:08:48.833 回答
1

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;
}

有趣的是,对于高维数据,这个度量的有用性下降了,曼哈顿距离可以成为一个更可取的度量。Aggarwal (2001)写了一篇题为“On the Surprising Behavior of Distance Metrics in High Dimensional Space”的论文。

于 2012-11-11T23:30:45.060 回答
0

你的公式不正确;看看2D 距离公式,然后将其扩展到 3D。

还要注意与获取 2D/3D 矢量长度的公式的相似之处。

于 2012-11-11T23:08:01.647 回答
0

您应该尝试每个组件的差异平方的平方根。见公式

于 2012-11-11T23:09:02.853 回答