【发布时间】:2012-02-22 13:10:42
【问题描述】:
我编写了绘制谢尔宾斯基分形的代码。它真的很慢,因为它使用递归。你们有谁知道我如何在没有递归的情况下编写相同的代码以使其更快?这是我的代码:
midpoint[p1_, p2_] := Mean[{p1, p2}]
trianglesurface[A_, B_, C_] := Graphics[Polygon[{A, B, C}]]
sierpinski[A_, B_, C_, 0] := trianglesurface[A, B, C]
sierpinski[A_, B_, C_, n_Integer] :=
Show[
sierpinski[A, midpoint[A, B], midpoint[C, A], n - 1],
sierpinski[B, midpoint[A, B], midpoint[B, C], n - 1],
sierpinski[C, midpoint[C, A], midpoint[C, B], n - 1]
]
编辑:
我用混沌游戏的方法写了它,以防有人感兴趣。感谢您的精彩回答! 代码如下:
random[A_, B_, C_] := Module[{a, result},
a = RandomInteger[2];
Which[a == 0, result = A,
a == 1, result = B,
a == 2, result = C]]
Chaos[A_List, B_List, C_List, S_List, n_Integer] :=
Module[{list},
list = NestList[Mean[{random[A, B, C], #}] &,
Mean[{random[A, B, C], S}], n];
ListPlot[list, Axes -> False, PlotStyle -> PointSize[0.001]]]
【问题讨论】:
-
当我画这些东西时,我发现渲染图形比计算三角形位置要花更长的时间。我还使用了递归方法(如果有一点不同)。
标签: algorithm math recursion wolfram-mathematica fractals