Как равномерно распределить 5 баллов по неправильной форме? - PullRequest
2 голосов
/ 10 сентября 2009

Вот проблема, которую я пытаюсь решить:

У меня неправильная форма. Как бы я распределил 5 точек на этой фигуре так, чтобы расстояние между каждой точкой было равно друг другу?

Ответы [ 3 ]

8 голосов
/ 21 сентября 2009

Дэвид говорит, что это невозможно, но на самом деле есть ответ из левого поля: просто поместите все свои точки друг на друга ! Все они будут иметь одинаковое расстояние до всех остальных точек: ноль.

Фактически, это единственный алгоритм, который имеет решение (т.е. все попарные расстояния одинаковы) независимо от формы ввода.

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

6 голосов
/ 10 сентября 2009

это математически невозможно. Он будет работать только для небольшого подмножества базовых фигур.

Однако есть несколько решений, которые вы можете попробовать:

  1. Аналитический подход. Начните с точки P0, создайте сферу вокруг P0 и пересекайте ее с базовой формой, давая вам набор кривых C0. Затем создайте еще одну точку P1 где-нибудь на C0. Опять же, создайте сферу вокруг P1 и пересекайте ее с C0, давая вам набор точек C1, ваша третья точка P2 будет одной из точек в C1. И так далее. Этот подход гарантирует ограничения по расстоянию, но он также сильно зависит от начальных условий.

  2. Итерационный подход. По сути, поиск форм. Вы создаете некоторые точки на объекте, а также создаете пружины между теми, которые имеют ограничение по расстоянию. Затем вы решаете силы пружины и соответственно перемещаете свои точки. Скорее всего, это оттолкнет их от базовой формы, поэтому вам необходимо вернуть их на базовую форму. Повторяйте до тех пор, пока ваши точки больше не будут двигаться или пока не будет выполнено ограничение расстояния в пределах допуска.

  3. Подбор проб. Преобразуйте вашу базовую геометрию в пространство вокселей и начните выкапывать все воксели, которые находятся слишком близко к вновь вставленной точке. Это гарантирует, что вы никогда не получите две точки слишком близко друг к другу, но это также страдает от проблем толерантности (и, вероятно, производительности).

Если вы сможете предоставить больше информации о природе вашей геометрии и ваших ограничениях, станет возможен более конкретный ответ.

0 голосов
/ 20 ноября 2018

Единственный способ расположить 5 точек, одинаково удаленных друг от друга (кроме тривиального решения провести их через начало координат), находится в пространстве 4+. Математически невозможно иметь 5 одинаково удаленных объектов в 3D. Четыре - это максимум, что вы можете иметь в 3D, и эта форма - тетраэдр.

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