📜  细谷三角(1)

📅  最后修改于: 2023-12-03 15:41:14.915000             🧑  作者: Mango

细谷三角介绍

简介

细谷三角(Sierpinski Triangle)是一种基于递归构建的分形图形,由波兰数学家细谷昌信在1916年发明。

可以通过不断以当前三角形中心为顶点,将三条边分别平分的方式进行递归,生成任意大小的细谷三角。它具有自相似性,即整个图形的一部分可以近似地看做是整个图形本身。

实现

在计算机图形学中,我们可以通过递归调用函数来实现细谷三角的绘制。

下面的Python代码展示了如何使用递归函数draw_triangle()绘制细谷三角:

import turtle

def draw_triangle(points, color, myTurtle):
    myTurtle.fillcolor(color)
    myTurtle.up()
    myTurtle.goto(points[0][0], points[0][1])
    myTurtle.down()
    myTurtle.begin_fill()
    myTurtle.goto(points[1][0], points[1][1])
    myTurtle.goto(points[2][0], points[2][1])
    myTurtle.goto(points[0][0], points[0][1])
    myTurtle.end_fill()

def get_mid(p1, p2):
    return [(p1[0]+p2[0])/2, (p1[1]+p2[1])/2]

def sierpinski(points, degree, myTurtle):
    colormap = ['blue','red','green','white','yellow','violet','orange']
    draw_triangle(points, colormap[degree], myTurtle)
    if degree > 0:
        sierpinski([points[0],
                    get_mid(points[0], points[1]),
                    get_mid(points[0], points[2])],
                   degree-1, myTurtle)
        sierpinski([points[1],
                    get_mid(points[0], points[1]),
                    get_mid(points[1], points[2])],
                   degree-1, myTurtle)
        sierpinski([points[2],
                    get_mid(points[2], points[1]),
                    get_mid(points[0], points[2])],
                   degree-1, myTurtle)

myTurtle = turtle.Turtle()
myWin = turtle.Screen()
myPoints = [[-200,-100],[0,200],[200,-100]]
sierpinski(myPoints, 3, myTurtle)
myWin.exitonclick()

在上述代码中,我们使用了turtle绘图库和递归函数sierpinski()来绘制细谷三角。在每一次调用sierpinski()时,我们会将当前的三角形划分成三个小三角形,并以这三个小三角形为参数继续递归调用自身,直到绘制的细谷三角达到指定深度。

效果

下图展示了使用上述代码绘制深度为3的细谷三角的效果:

Sierpinski Triangle

结语

细谷三角是一种简单而又有趣的图形,它具有自相似性和无限复杂度,是分形图形的典型代表之一。通过递归函数的实现,我们可以在计算机上轻松地生成任意深度的细谷三角,进而获得惊人而又美丽的图形效果。