如何填充Sierpinski三角形

2024-04-25 20:37:28 发布

您现在位置:Python中文网/ 问答频道 /正文

我很难弄清楚如何填充sierpinski三角形,使其看起来像这样:

enter image description here

我不确定如何“填充”三角形,因为当我在代码中填充时,self.canvas.create_line(p1[0], p1[1], p2[0], p2[1], p3[0], p3[1], p1[0], p1[1], tags = 'line')只有线是绿色的,因为它不是一个形状,因此我如何才能填充它?如果有人能指引我正确的方向,我将不胜感激!你知道吗

    self.label = tkinter.Label(self.frame1, text = 'Enter an order: ')
        #Convert string to integer
    self.order = tkinter.StringVar()
    #Text variable needs to be string
    self.entry = tkinter.Entry(self.frame1, textvariable = self.order, \
            justify = 'right')

    self.button = tkinter.Button(self.frame1, \
            text = 'Display Sierpinski Triangle', \
            command = self.display)

    self.label.pack(side = 'left')
    self.entry.pack(side = 'left')
    self.button.pack(side = 'left')

    self.main_window.mainloop()

def display(self):
    self.canvas.delete('line')
    p1 = [self.width/2, 10]
    p2 = [10, self.height - 10]
    p3 = [self.width - 10, self.height - 10]
    #Convert self.order from string to integer
    self.displayTriangle(int(self.order.get()), p1, p2, p3)

def displayTriangle(self, order, p1, p2, p3):
    if order == 0: #Base Case
        self.canvas.create_line(p1[0], p1[1], p2[0], p2[1], p3[0], p3[1], \
                p1[0], p1[1], tags = 'line')
    else:          #General Case
        p12 = self.midpoint(p1, p2)
        p23 = self.midpoint(p2, p3)
        p31 = self.midpoint(p3, p1)

        self.displayTriangle(order - 1, p1, p12, p31)
        self.displayTriangle(order - 1, p12, p2, p23)
        self.displayTriangle(order - 1, p31, p23, p3)

def midpoint(self, p1, p2):
    p = [0, 0]
    p[0] = (p1[0] + p2[0])/ 2
    p[1] = (p1[1] + p2[1])/ 2
    return p

Tags: toselfstringtkinterlineordersidepack
1条回答
网友
1楼 · 发布于 2024-04-25 20:37:28

您应该使用create_polygon来创建三角形。只需像下面的例子一样传递坐标。你知道吗

c=Canvas(root, width=300, height=300)
c.pack()

c.create_polygon((150, 0, 0, 150, 300, 150),fill='green')

输出:

enter image description here

相关问题 更多 >