如何在彼此重叠的地方绘制三个正方形?

时间:2020-08-05 05:50:28

标签: python turtle-graphics

我想使用类似于以下的turtle函数在Python中绘制三个重叠的正方形: [1]:https://i.stack.imgur.com/lhfq2.png

到目前为止,这是我的代码


    from turtle import *


    # Set up canvas
    setup()
    title('three (3) squares of different colours') 
    speed('fastest') 
    pensize(4)

    # Draw the outline of square
    penup ()
    goto (0,0)
    pendown ()
    color ('black')

    for number in range (4):
    forward(150)
    left(90)
    penup()     

    # Fill square with colour
    goto (0,0)
    color('black', 'yellow')
    pendown()
    begin_fill()

    for number in range (4):
       forward(150)
       left(90)
       end_fill()


    hideturtle ()
    done ()

1 个答案:

答案 0 :(得分:1)

您没有绘制三个正方形,而是绘制了相同的正方形两次-一次填充,一次不绘制。您应该能够使用一系列简单的forward()right(90)left(90)命令来绘制此图。以及颜色更改和填充请求。

我认为处理该问题的有趣方法是,考虑红色和绿色正方形的大小相同,因此我们应该能够仅使用不同的填充颜色来重用相同的代码。第二个挑战是,在最初将笔最佳地放置在窗口中之后,要绘制图形而不会再次抬起笔。这类似于抬起铅笔在纸上绘制该图形。

from turtle import *

LENGTH = 415
OUTLINE = 10

title('Three (3) squares of different colours')

pensize(OUTLINE)

penup()
goto(-LENGTH/4, LENGTH/4)  # center drawing on the window
pendown()

fillcolor('lime')

for _ in range(2):
    begin_fill()

    forward(LENGTH/2)
    right(90)

    for _ in range(3):
        forward(LENGTH)
        right(90)

    forward(LENGTH/2)

    end_fill()

    fillcolor('red')
    left(90)

left(90)
fillcolor('yellow')
begin_fill()

for _ in range(4):
    forward(LENGTH/2)
    left(90)

end_fill()

hideturtle()
exitonclick()

只是一些想法。还有其他有趣的方法可以处理此绘图。例如,我们可以使用 stamping

代替 drawing
from turtle import *

LENGTH = 415
OUTLINE = 10
CURSOR_SIZE = 20

title('Three (3) squares of different colours')

penup()
shape('square')
shapesize(LENGTH / CURSOR_SIZE, outline=OUTLINE)

goto(LENGTH/4, LENGTH/4)
fillcolor('red')
stamp()

goto(-LENGTH/4, -LENGTH/4)
fillcolor('lime')
stamp()

shapesize(LENGTH / 2 / CURSOR_SIZE)
home()
fillcolor('yellow')
stamp()

hideturtle()
exitonclick()
相关问题