Эффективный способ определения расстояния между двумя трехмерными точками - PullRequest
17 голосов
/ 15 февраля 2010

Я пишу код на C ++ и хочу вычислить расстояние между двумя точками. Вопрос 1:

У меня есть две точки P (x1, y1, z1) и Q (x2, y2, z2), где x, y и z являются числами с плавающей запятой / двойными числами.

Я хочу найти расстояние между этими двумя точками. Один из способов сделать это:

square_root (x_diff x_diff + y_diff y_diff + z_diff * z_diff)

Но это, вероятно, не самый эффективный способ. (например, лучшая формула или готовая утилита в math.h и т. д.)

Вопрос 2:

Есть ли лучший способ, если я просто хочу определить, являются ли P и Q на самом деле одинаковыми точками?

Мои входные данные - координаты x, y и z обеих точек.

Спасибо

Ответы [ 11 ]

0 голосов
/ 15 февраля 2010

Что касается вопроса 1, штраф за производительность - это вычисление самого квадратного корня. Формула для расчета расстояния с использованием квадратного корня из парных координатных различий такова.

Я бы настоятельно рекомендовал прочитать эту A-M-A-Z-I-N-G реализацию квадратного корня Джона Кармака из программного обеспечения ID, которое он использовал в своем движке в Quake III. Это просто ВОЛШЕБНОЕ.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...