2015-12-07 2 views
1

Если у меня есть X количество вещей (позволяет просто случайно сказать 300)Устройте X количество вещей равномерно вокруг точки в 3D пространстве

Есть ли алгоритм, который будет устраивать эти вещи несколько равномерно вокруг центральной точки? Как 100-сторонние кости или 3d-сетка сферы?

Id, а есть вещи, которые несколько равномерно, как это .. enter image description here

Скорее, чем этот полярный способ ..

enter image description here

пс. Для тех, кого интересует, интересно, почему я хочу это сделать? Ну, я делаю these для удовольствия, и после завершения # 7 я решил представить массив проводов в 3d в Unity и наблюдать за их работой в замедленном порядке.

+1

Вы ищете что-то в этом роде: https://sites.google.com/site/dlampetest/python/triangulating-a-sphere-recursively? –

+0

Да .. Хотя я * не думаю *, он работает для произвольного количества точек. Я могу просто сделать полярный, так как это легко –

+0

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

ответ

0

Вот трехэтапный подход. 1a) Сделайте больше очков, чем вам нужно. 1b) Удалите некоторые. 2) Отрегулируйте остальные.

1a) Чтобы сделать больше очков, которые вам нужны, возьмите любой квазирегулярный многогранник со сторонами, которые тесселят (треугольники, квадраты, бриллианты). Тесселируйте сферические градиенты по подразделу, создавая больше вершин. Например, если вы используете обычный икосаэдр, вы получаете геодезические купола. (Подразделение на 2, вы получаете двойное значение C buckyball.) Разработка точных формул не является трудной. Число новых вершин на лице квадратично в разбиении.

1b) В случайном порядке удалите достаточное количество баллов, чтобы свести вас к целевому номеру.

2) Используйте алгоритм force-directed layout, чтобы перераспределить вершины над сферой. График базовой силы - это тот, который предоставляется ближайшими соседями в вашей базовой тесселяции.

Есть и другие способы сделать шаг 1), например, просто генерирование случайных точек в любом распределении. Однако есть преимущество начинать с квазирегулярной фигуры. В некоторых случаях алгоритмы с принудительной ориентацией имеют репутацию плохой конвергенции. Начав с чего-то, что уже в основном является оптимальным, вы обойдете большинство всех проблем конвергенции, которые могут возникнуть у вас.

0

Вот простое преобразование, которое отображает однородный образец в прямоугольнике [0, 2 pi] x [-1, 1] на единый образец на сфере радиуса r:

T(phi, z) = (r cos(phi) sqrt(1 - z^2), r sin(phi) sqrt(1 - zˆ2), r z) 

Причина, почему это преобразование производит однородные образцы на сфере является то, что площадь любого региона T(U), полученный преобразованием области U от прямоугольника не зависит от U, но на площади U.

Чтобы доказать это математически достаточно, чтобы убедиться, что норма векторную продукта

| ∂T/∂phi x ∂T/∂z | 

постоянна (область на сфере является интегралом от этого векторного продукта w.r.t. phi и z).

Резюмируя

Для того, чтобы произвести случайную выборку равномерно распределенную в сфере радиуса r сделать следующее:

  • производит случайную выборку (phi_1, ..., phi_n) равномерно распределенной в [0, 2 pi].
  • Производите случайный образец (z_1, ..., z_n) равномерно распределенный в [-1, 1].

  • За каждую пару (phi_j, z_k) вычислить T(phi_j, z_k) по следующей формуле.

Смежные вопросы