如何在python中可视化分形

2024-05-23 15:44:48 发布

您现在位置: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.vertexColor, self.vertexRadius)
        for i in range(SierpinskiCarpet.numPoints):
            listVertices = SierpinskiCarpet
            randVert = randint(0, len(listVertices)-1)
            newVertexPoint = listVertices[randVert]
            m1 = Point.midpt(m1, newVertexPoint)
            self.plot(m1)

    else:
        Pentagon(self.dimensions)
        for i in range(len(Pentagon.verticies)):
            plotPoint(i, self.vertexColor, self.vertexRadius)
        for i in range(Pentagon.numPoints):
            listVertices = SierpinskiCarpet
            randVert = randint(0, len(listVertices)-1)
            newVertexPoint = listVertices[randVert]
            m1 = Point.midpt(m1, newVertexPoint)
            self.plot(m1)
            


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


Tags: inselfforlenrangedimensionsm1fractal
1条回答
网友
1楼 · 发布于 2024-05-23 15:44:48

虽然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, p2, p3], color='red')
        return

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


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

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

plt.show()

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

matplotlib output

相关问题 更多 >