Могу ли я упростить неравенство «расстояние (p1, p2) расстояние (p1, p3)?

Я работаю над некоторой векторной логикой, поэтому я спрашиваю: могу ли я экономить время процессора, упростив это неравенство:

distance(vector1, vector2) < distance(vector1, vector3)

Я вижу, что vector1 повторяется в обоих случаях.

14 голосов | спросил Филип Димитровски 14 PM00000050000000631 2013, 17:13:06

5 ответов


24

Да , вы можете упростить это. Во-первых, перестаньте называть их векторами. Это точки. Letâ € ™ s назовем их ---- +: = 0 =: + ----, ---- +: = 1 =: + ---- и ---- +: = 2 =: + ----.

Итак, вы хотите:

---- +: = 3 = + ----

Замените расстояния квадратами расстояний, затем с помощью точечных продуктов (из определения Евклидовой длины . Замените ---- +: = 4 =: + ---- с помощью ---- +: = 5 =: + ---- (теперь это реальные векторы). Развернуть, упростить, коэффициент:

---- +: = 6 = + ----

Вот вы:

---- +: = 7 = + ----

С помощью вашей векторной нотации:

---- +: = 8 = + ----

Это несколько дополнений и один точечный продукт вместо двух предыдущих точечных продуктов.

ответил sam hocevar 14 PM00000050000004431 2013, 17:50:44
17

Да. Предполагая, что ваша функция ---- +: = 0 =: + ---- использует квадратный корень, вы можете упростить это, удалив квадрат корень.

При попытке найти большее (или меньшее) расстояние, ---- +: = 1 =: + ---- по-прежнему сохраняется для ---- +: = 2 =:. + ----

Однако дальнейшие попытки упростить уравнение математически, вероятно, бессмысленны. Расстояние между ---- +: = 3 =: + ---- и ---- +: = 4 =: + ---- не является так же, как расстояние между ---- +: = 5 =: + ---- и ---- +: = 6 =: + ---- . Хотя математическое уравнение можно упростить, так как ответ Сэма показывает, что форма, в которой он сейчас находится, скорее всего так же проста, с точки зрения использования процессора.

ответил MichaelHouse 14 PM00000050000001231 2013, 17:28:12
0

Некоторые математики могут помочь.

Что вы пытаетесь сделать:

---- +: = 0 = + ----

Из чего вы можете удалить повторяющиеся переменные и сгруппировать другие. Операция, которую вы должны проверить:

---- +: = 1 = + ----

Надеюсь, что это поможет.

ответил j4nSolo 14 PM00000050000002031 2013, 17:58:20
-1

Реальный вопрос заключается в том, как уменьшить вычисление для определения ближайшего объекта?

Оптимизация часто выполняется в играх, хотя при всех оптимизациях она должна управляться профилем и, часто, не упрощает .

Способ избежать ненужных вычислений расстояний для определения ближайшей вещи или всех вещей в определенном диапазоне - это использовать пространственный индекс , например. octree .

Это только окупается, если имеется большое количество объектов. Для всего трех объектов вряд ли окупится и, конечно, не упростить код.

ответил Will 14 PM00000070000002931 2013, 19:09:29
-3

это зависит от того, какой выход расстояния (v1, v2) равен

, если он является десятичным (float или double) над вектором, вероятно, что distancesquared будет намного быстрее

ответил RoughPlace 14 PM00000050000003731 2013, 17:17:37

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132