Реализации алгоритмов/Губка Менгера: различия между версиями
Содержимое удалено Содержимое добавлено
м →Построение методом хаоса на VBA для CAD-систем: Алгоритм |
GDL |
||
Строка 1:
[[Файл:Menger-Schwamm.png|thumb|Губка Менгера]]
'''Губка Менгера''' — геометрический [[w:фрактал|фрактал]], один из трёхмерных аналогов [[w:ковёр Серпинского|ковра Серпинского]].
== Построение итеративным методом на [[w:en:Geometric Description Language|GDL]] для [[w:ArchiCAD|ArchiCAD]] ==
!!!3D Script
GROUP "InitialCube"
AddX -0.5
AddY -0.5
AddZ -0.5
BLOCK 1, 1, 1
ENDGROUP
GROUP "Rods"
AddX -0.5
AddY -0.5
AddZ -0.5
FOR n = 1 TO i
MulX 1/3
MulY 1/3
AddX 1
AddY 1
FOR ny = 1 TO 3^(n-1)
FOR nx = 1 TO 3^(n-1)
BLOCK 1, 1, 1
AddX 3
NEXT nx
DEL 3^(n-1)
AddY 3
NEXT ny
DEL 3^(n-1)
AddY -1
AddX -1
NEXT n
ENDGROUP
GROUP "Graphite"
PLACEGROUP "Rods"
RotX 90
PLACEGROUP "Rods"
RotY -90
PLACEGROUP "Rods"
ENDGROUP
Menger = SUBGROUP("InitialCube", "Graphite")
PLACEGROUP Menger
KILLGROUP "InitialCube"
KILLGROUP "Rods"
KILLGROUP "Graphite"
KILLGROUP Menger
</source>▼
[[Файл:Menger4_Coupe.jpg|thumb|Губка Менгера в разрезе]]▼
[[w:Сечение|Сечение]] Губки Менгера плоскостью <math>x-y+z=0</math> содержит [[w:гексаграмма (символ)|гексаграммы]].▼
Для получения соответствующего [[w:Разрез|разреза]] нужно рисовать только те точки, которые лежат ниже этой плоскости: <math>x-y+z<0</math>, т.е. наложить условие при отрисовывании точек:▼
<source lang="gdl">
AddX -0.5 !Move Left to Let the CutPlane be Described
CUTPLANE 0.5, -0.5, 0.5
AddX 0.5 !Move Right Again
PLACEGROUP Menger
CUTEND
</source>
== Построение методом хаоса на [[w:Visual Basic for Applications|VBA]] для [[w:Система автоматизированного проектирования|CAD-систем]] ==
Строка 15 ⟶ 79 :
<source lang="vb">
Sub Sponge()
Dim pointObj As AcadPoint
Строка 129 ⟶ 191 :
ZoomExtents
End Sub
▲</source>
▲[[Файл:Menger4_Coupe.jpg|thumb|Губка Менгера в разрезе]]
▲[[w:Сечение|Сечение]] Губки Менгера плоскостью <math>x-y+z=0</math> содержит [[w:гексаграмма (символ)|гексаграммы]].
▲Для получения соответствующего [[w:Разрез|разреза]] нужно рисовать только те точки, которые лежат ниже этой плоскости: <math>x-y+z<0</math>, т.е. наложить условие при отрисовывании точек:
▲<source lang="vb">
</source>
|