Вычисление формулы для двух объектов в трехмерном пространстве

Я пытаюсь выяснить формулу, чтобы получить расстояние между двумя объектами в трехмерном пространстве. Пока что ответы не верны, когда я запускаю программу:

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

Решение

Если вы хотите евклидово расстояние между двумя точками в трехмерном пространстве, ваш код должен выглядеть примерно так

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

или более просто, используя ваши квадратные переменные расстояния x,y,z :

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

Другие решения

Если вы не заинтересованы строго на расстоянии двух точки в трехмерном пространстве, Алгоритм Гилберта-Джонсона-Кеерти это то, что вас может заинтересовать

2

Расстояние в трехмерном пространстве обычно определяется с помощью Теорема Пифагора.

Формула для этого

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) было написано об этом.

1

Ваша формула неверна; Взгляни на 2D формула расстояния, затем расширить его до 3D.

Также обратите внимание на сходство с формулой для получения 2D / 3D векторной длины.

0

Вы должны попробовать квадратный корень из квадрата разности каждого компонента. Увидеть формула

0
По вопросам рекламы ammmcru@yandex.ru
Adblock
detector