Чи знає хтось про алгоритм, який дозволяє отримати фігуру, як це зображення?


9

Хтось знає, як створити алгоритм, здатний зробити фігуру так само, як на малюнку, коли задано набір конкретних точок (3D-масив)

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


4
Це річ, це те, що ви шукаєте: blog.andreaskahler.com/2009/06/…
Luke San Antonio Bialecki

3
@LukeSanAntonio Опублікуйте, що як відповідь, щоб я міг просити її, будь ласка;) (але не лише посилання, для відповіді
знадобиться

1
@YannisRizos Я б хотів, але я не маю жодних знань і досвіду в подібній справі, тому я не міг дати вам адекватне пояснення (ну я міг би, але інші могли зробити набагато краще) Єдиною причиною, за якою я знав посилання, є тому що я знав назву фігури від Blender ( wiki.blender.org/index.php/Doc:2.4/Manual/Modeling/Meshes/… )
Лука Сан-Антоніо Біалекі

створення тіні з 3D-об’єкта робиться щодня, перевіряйте тіньове картографування та об'єм тіней , але доступні більше алгоритмів створення тіні
грохот фрик

Я не хочу створити Тінь, це фізичний об'єкт. Ми збираємось його надрукувати в 3D.
користувач88794

Відповіді:


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 облич. Це залишається читачеві як вправу: с

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

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

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)

При кожній ітерації нам, можливо, доведеться реконструювати грані, але це досить легко. Кожне обличчя розділено на чотири:

очищення обличчя

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.