3

3D 空間で 2 つのオブジェクト間の距離を取得する式を理解しようとしています。これまでのところ、プログラムを実行すると答えが間違っています。

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 次元空間の 2の距離に厳密に関心がある場合を除き、 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)による「高次元空間における距離計量の驚くべき挙動について」というタイトルの論文が書かれています。

于 2012-11-11T23:30:45.060 に答える
0

数式が正しくありません。2D 距離式を見て、それを 3D に拡張します。

また、2D/3D ベクトルの長さを取得する式との類似点にも注意してください。

于 2012-11-11T23:08:01.647 に答える
0

各成分の差の二乗の平方根を試す必要があります。公式を見る

于 2012-11-11T23:09:02.853 に答える