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