Кто-нибудь знает, как создать алгоритм, способный сделать фигуру такой же, как на картинке, когда дан набор определенных точек (3D-массив)
Кто-нибудь знает, как создать алгоритм, способный сделать фигуру такой же, как на картинке, когда дан набор определенных точек (3D-массив)
Ответы:
Приходя сюда после битвы, но так как нет никакого принятого ответа и видя, что @Luke отказывается получить репутацию, которую он заслуживает, вот краткое резюме ссылки, которую он предоставил.
Итак, полный алгоритм доступен здесь:
http://blog.andreaskahler.com/2009/06/creating-icosphere-mesh-in-code.html
Идея состоит в том, чтобы загрузить вашу сетку простым методом, который дает вам сферу с 20 гранями, а затем улучшать ее, пока вы не будете удовлетворены.
Вы начинаете с икосаэдра . Как говорится в статье в Википедии, вы можете получить вершины, нарисовав три одинаковых и ортогональных прямоугольника. У вас есть 3 прямоугольника с 4 углами каждый -> 12 вершин.
Иллюстрация из Википедии:
Например, точки Z-плана (a, b - длина прямоугольника):
Теперь вам все еще нужно найти 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)
На каждой итерации нам, возможно, придется восстанавливать грани, но это довольно просто. Каждое лицо делится на четыре: