如何在python中可视化分形

问题描述

这是生成分形的代码

import matplotlib.pyplot as plt

def makes(self,fractal):
    if (fractal == "SierpinskiTriangle"):
        SierpinskiTriangle(self.dimensions)
        for i in range(len(SierpinskiTriangle.verticies)):
            plotPoint(i,self.vertexColor,self.vertexRadius)
        for i in range(SierpinskiTriangle.numPoints):
            listVertices = SierpinskiTriangle.verticies
            randVert = randint(0,len(listVertices)-1)
            newVertexPoint = listVertices[randVert]
            m1 = Point.midpt(m1,newVertexPoint)
            self.plot(m1)

    elif (fractal == "SierpinskiCarpet"):
        SierpinskiCarpet(self.dimensions)
        for i in range(len(SierpinskiCarpet.verticies)):
            plotPoint(i,self.vertexRadius)
        for i in range(SierpinskiCarpet.numPoints):
            listVertices = SierpinskiCarpet
            randVert = randint(0,newVertexPoint)
            self.plot(m1)

    else:
        Pentagon(self.dimensions)
        for i in range(len(Pentagon.verticies)):
            plotPoint(i,self.vertexRadius)
        for i in range(Pentagon.numPoints):
            listVertices = SierpinskiCarpet
            randVert = randint(0,newVertexPoint)
            self.plot(m1)
            


最后我不知道如何可视化分形。
我认为它与 matplot.lib 有关,但我不确定如何

解决方法

虽然 matplotplib 主要适用于绘制图形,但如果您愿意,您也可以使用它绘制点和多边形;另见:How to draw a triangle using matplotlib.pyplot based on 3 dots (x,y) in 2D?

例如,要从多边形组成一个 Sierpinski triangle,并将这些多边形绘制到图形上:

import numpy as np
import matplotlib.pyplot as plt

MAX_LEVEL = 6


def sierpinski(p1,p2,p3,level=0):
    if level >= MAX_LEVEL:
        yield plt.Polygon([p1,p3],color='red')
        return

    yield from sierpinski(p1,(p1+p2) / 2,(p1+p3) / 2,level+1)
    yield from sierpinski((p1+p2) / 2,(p2+p3) / 2,level+1)
    yield from sierpinski((p1+p3) / 2,level+1)


plt.figure()
plt.scatter([0,10,10],[0,color='blue')

for patch in sierpinski(
        np.array([1.0,1.0]),np.array([9.0,np.array([5.0,9.0])):
    plt.gca().add_patch(patch)

plt.show()

上面的代码为我生成了以下图像输出:

matplotlib output