Python递归谢尔宾斯基三角形

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()

望采纳

img

你题目的解答代码如下:

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()

如有帮助,请点击我的回答下方的【采纳该答案】按钮帮忙采纳下,谢谢!

img

您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!
PS:问答VIP年卡 【限时加赠:IT技术图书免费领】,了解详情>>> https://vip.csdn.net/askvip?utm_source=1146287632