Я пытаюсь выяснить формулу, чтобы получить расстояние между двумя объектами в трехмерном пространстве. Пока что ответы не верны, когда я запускаю программу:
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;
}
Если вы хотите евклидово расстояние между двумя точками в трехмерном пространстве, ваш код должен выглядеть примерно так
objectDistance = sqrt((object2X-object1X)*(object2X-object1X) +
(object2Y-object1Y)*(object2Y-object1Y) +
(object2Z-object1Z)*(object2Z-object1Z));
или более просто, используя ваши квадратные переменные расстояния x,y,z
:
objectDistance = sqrt(x + y + z);
Если вы не заинтересованы строго на расстоянии двух точки в трехмерном пространстве, Алгоритм Гилберта-Джонсона-Кеерти это то, что вас может заинтересовать
Расстояние в трехмерном пространстве обычно определяется с помощью Теорема Пифагора.
Формула для этого
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;
}
Интересно, что для многомерных данных полезность этой метрики уменьшается и Манхэттен расстояние может стать предпочтительным показателем. Статья под названием «Об удивительном поведении метрик расстояния в многомерном пространстве» Аггарвал (2001) было написано об этом.
Ваша формула неверна; Взгляни на 2D формула расстояния, затем расширить его до 3D.
Также обратите внимание на сходство с формулой для получения 2D / 3D векторной длины.
Вы должны попробовать квадратный корень из квадрата разности каждого компонента. Увидеть формула