Кто-нибудь знает Алгоритм, который позволяет фигуру, как это изображение?

9

Кто-нибудь знает, как создать алгоритм, способный сделать фигуру такой же, как на картинке, когда дан набор определенных точек (3D-массив)

введите описание изображения здесь

user88794
источник
4
Это то, что вы ищете: blog.andreaskahler.com/2009/06/…
Люк Сан-Антонио Бялецкий,
3
@LukeSanAntonio Опубликовать это как ответ, чтобы я мог высказать его, пожалуйста;) (но не просто ссылка, для ответа
понадобится
1
@YannisRizos Я хотел бы, но у меня нет никаких знаний или опыта в таких вещах, поэтому я не мог дать вам адекватное объяснение (ну, я мог, но другие могли бы сделать намного лучше) Единственная причина, по которой я знал, что ссылка потому что я знал имя фигуры из Blender ( wiki.blender.org/index.php/Doc:2.4/Manual/Modeling/Meshes/… )
Люк Сан-Антонио Бялецкий,
создавая тень от 3D - объекта производится ежедневно, проверить теневое отображение и объем теневого , но есть больше алгоритмов создания теней доступна
трещотка урод
Я ищу не Тень, а физический объект. Мы собираемся напечатать его в 3D.
user88794

Ответы:

5

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

Итак, полный алгоритм доступен здесь:

http://blog.andreaskahler.com/2009/06/creating-icosphere-mesh-in-code.html

Идея состоит в том, чтобы загрузить вашу сетку простым методом, который дает вам сферу с 20 гранями, а затем улучшать ее, пока вы не будете удовлетворены.

Начальная загрузка формы

Вы начинаете с икосаэдра . Как говорится в статье в Википедии, вы можете получить вершины, нарисовав три одинаковых и ортогональных прямоугольника. У вас есть 3 прямоугольника с 4 углами каждый -> 12 вершин.

Иллюстрация из Википедии:

икосаэдр

Например, точки Z-плана (a, b - длина прямоугольника):

  • (+ a, + b, 0)
  • (-a, + b, 0)
  • (+ a, -b, 0)
  • (-a, -b, 0)

Теперь вам все еще нужно найти 20 лиц. Это оставлено в качестве упражнения для читателя: p

Уточнение формы

Теперь, когда у вас есть базовая сфера, вы можете добавить полигоны. Вы делаете это с помощью этого простого алгоритма:

for each iteration:
    # each iteration multiplies by 4 the number of faces
    for each edge at the current iteration:
        split the edge in two
        replace the middle point on the sphere

Чтобы найти среднюю точку, мы предполагаем, что мы хотим создать единичную сферу (центр (0, 0, 0), радиус 1).

middlePoint(p1, p2):
    middle = Point((p1.X + p2.X / 2), # same for y, z)
    radius = sqrt(middle.X^2, middle.Y^2, middle.Z^2)
    return Point(middle.X / radius,  # same for y, z)

На каждой итерации нам, возможно, придется восстанавливать грани, но это довольно просто. Каждое лицо делится на четыре:

очищение лица

Саймон Бергот
источник