Python怎么用递归法画谢尔宾斯基三角形(3阶)
不知道怎么用坐标表示三角形
import turtle
t = turtle.Turtle()
def get_midpoint(a, b):
ax, ay = a
bx, by = b
return (ax + bx) / 2, (ay + by) / 2
def draw_triangle(a, b, c):
ax, ay = a
bx, by = b
cx, cy = c
t.penup()
t.goto(ax, ay)
t.pendown()
t.goto(bx, by)
t.goto(cx, cy)
t.goto(ax, ay)
t.penup()
def draw_sierpinski(triangle, depth):
"""
:param triangle: 指定三角形三个顶点坐标,示例:((ax,ay),(bx,by),(cx,cy))。
:param depth: 指定层数
"""
a, b, c = triangle
draw_triangle(a, b, c)
if depth == 0:
return
else:
d = get_midpoint(a, b)
e = get_midpoint(b, c)
f = get_midpoint(c, a)
draw_sierpinski([a, d, f], depth-1)
draw_sierpinski([d, b, e], depth-1)
draw_sierpinski([f, e, c], depth-1)
if __name__ == '__main__':
triangle = [[-200, -100], [0, 200], [200, -100]]
draw_sierpinski(triangle, 5)
turtle.done()
望采纳
你题目的解答代码如下:
import turtle
def draw_triangle(points, color):
turtle.fillcolor(color)
turtle.up()
turtle.goto(points[0][0], points[0][1])
turtle.down()
turtle.begin_fill()
turtle.goto(points[1][0], points[1][1])
turtle.goto(points[2][0], points[2][1])
turtle.goto(points[0][0], points[0][1])
turtle.end_fill()
def get_mid(p1, p2):
return ((p1[0]+p2[0])/2, (p1[1]+p2[1])/2)
def sierpinski(points, degree):
colormap = ['blue', 'red', 'green', 'yellow','violet', 'orange', 'white']
draw_triangle(points, colormap[degree])
if degree > 0:
sierpinski([points[0],get_mid(points[0], points[1]),get_mid(points[0], points[2])], degree - 1)
sierpinski([points[1],get_mid(points[0], points[1]),get_mid(points[1], points[2])], degree - 1)
sierpinski([points[2],get_mid(points[2], points[1]),get_mid(points[0], points[2])], degree - 1)
my_points = [[-200, -50], [0, 200], [200, -50]]
sierpinski(my_points, 3)
turtle.done()
您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!如有帮助,请点击我的回答下方的【采纳该答案】按钮帮忙采纳下,谢谢!