Реализации алгоритмов/Губка Менгера: различия между версиями
Содержимое удалено Содержимое добавлено
м уточнение |
м оформление |
||
Строка 6:
Алгоритм итеративного метода основан на операции твердотельного вычитания (subtraction). В языке GDL такая операция реализуется с помощью групп (group).
# Строится группа-"уменьшаемое". Она состоит из одного единичного куба (стороной 1
# Строится группа-"вычитаемое". Она включает фронтальные, горизонтальные и профильные "стержни", которые будут вычитаться из куба. Размер и количество зависит от итерации.
# Проводится операция твердотельного вычитания.
Данный метод весьма требователен к ресурсам:
{| class="standard"
|-
!Итерация||1||2||3||4||5
|-
|Стержней одного направления||1||9||81||729||6561
|-
|Стержней всего||3||27||243||2187||19683
|-
|Сторона основания стержня||1/3||1/9||1/27||1/81||1/243
|-
|Вершин|| || || || ||
|-
|Треугольников|| || || || ||
|-
|Рёбер|| || || || ||
|}
Код оптимизирован под наглядность, а не производительность. В среде ArchiCAD 19 и 20 корректно исполняются 4 итерации. В среде ArchiCAD 13 (64 бит) корректно исполняются только 2 итерации.
Строка 14 ⟶ 32 :
<source lang="gdl">
!!!3D Script
MulX A
MulY B
MulZ ZZYZX
GROUP "InitialCube"
AddX -0.5▼
AddZ -0.5▼
BLOCK 1, 1, 1
ENDGROUP
GROUP "Rods"
FOR n = 1 TO i
MulX 1/3
MulY 1/3
Строка 48 ⟶ 64 :
PLACEGROUP "Rods"
RotX 90
PLACEGROUP "Rods"
RotY 90
PLACEGROUP "Rods"
ENDGROUP
Строка 55 ⟶ 74 :
Menger = SUBGROUP("InitialCube", "Graphite")
IF CutOut THEN
PLACEGROUP Menger▼
CUTPLANE 1.5, 1.5, 1.5▼
PLACEGROUP Menger
CUTEND
ELSE
▲ PLACEGROUP Menger
ENDIF
KILLGROUP "InitialCube"
Строка 66 ⟶ 91 :
[[w:Сечение|Сечение]] Губки Менгера плоскостью <math>x+y+z=0</math> содержит [[w:гексаграмма (символ)|гексаграммы]].
Для получения соответствующего [[w:Разрез|разреза]] нужно рисовать только
<source lang="gdl">
CUTPLANE 1.5, 1.5, 1.5
▲CUTPLANE 1, 1, 1
PLACEGROUP Menger
CUTEND
Строка 106 ⟶ 129 :
|}
Код оптимизирован под наглядность, а не производительность. В среде ArchiCAD 13, 19 и 20 корректно исполняются 4 итерации. Оптимальны для работы 3 итерации.
Для визуализации вместо старших итераций можно использовать текстуру [[w:Ковёр Серпиского|ковра Серпинского]]
<source lang="gdl">
!!!3D Script
MulX A/(3^i)
MulY B/(3^i)
MulZ ZZYZX/(3^i)
GOSUB i
|