在python中生成分形

问题描述

我目前正在解决一个问题,该问题涉及绘制具有下图形式的分形

enter image description here

我有点不确定分形代是如何工作的。我相信我们从一个正方形开始,然后从第 n 代到第 n+1 代,我们在任何正方形的每个对角线上放置一个新正方形。我不太明白为什么这不会导致分形看起来像一个巨大的网,但如果我设法编写一些代码,也许我会更好地理解它。

是否有一些聪明的方法可以在 python 中使用网格?非常感谢任何帮助,因为我在使用和绘制分形方面没有很多经验

解决方法

您可以递归地创建分形。要将其绘制在正方形内,如果已达到最低级别,只需绘制正方形即可。如果没有,则绘制 5 个 1/3 大小的分形:

import matplotlib.pyplot as plt

def draw_fractal(ax,levels=4,x=0,y=0,size=1):
    if levels == 0:
        ax.add_patch(plt.Rectangle((x,y),size,color='navy'))
    else:
        size3 = size / 3
        for i in range(3):
            for j in range(3):
                if (i + j) % 2 == 0:
                    draw_fractal(ax,levels - 1,x + i * size3,y + j * size3,size3)

fig,ax = plt.subplots()
ax.set_aspect(1)
ax.axis('off')
draw_fractal(ax)
plt.show()

左图是上面的分形。对于中心图像,测试更改为 if i == 1 or j == 1:。正确的图像使用 if i != 1 or j != 1::

fractal in corners and center