Есть ли способ проверить, полностью ли закрыт полигон? - PullRequest
1 голос
/ 24 марта 2019

Я пытаюсь нарисовать красный знак Стоп, обведенный белым. Тем не менее, я не могу понять, почему красный восьмиугольник не заполняет.

Если восьмиугольник еще открыт, почему бы ему не заполнить? Если это так, как я могу проверить, открыт ли он?

import turtle
turtle.bgcolor("black")
turtle.penup()
turtle.goto(-104,-229)
# Draws white octagon outline
for i in range(8):
    turtle.pensize(10)
    turtle.color("white")    
    turtle.pendown()
    turtle.forward(193)
    turtle.right(5)
    turtle.left(50)

# Draws red octagon
turtle.penup()
turtle.goto(-100,-220)
for i in range(8):
    turtle.pensize(10)
    turtle.color("red")
    turtle.fillcolor("red")
    turtle.begin_fill()    
    turtle.pendown()
    turtle.forward(185)
    turtle.right(5)
    turtle.left(50)
    turtle.end_fill()

# Writes "STOP"
turtle.penup()   
turtle.goto(5,-50)
turtle.setheading(360 / 8 / 2)
turtle.pendown()
turtle.stamp()  
turtle.pencolor("white")
turtle.shapesize(0.9)
turtle.stamp()
turtle.shapesize(1.0)
turtle.write("STOP", align="center", font=("Arial",110,"normal"))   
turtle.done()

Ответы [ 2 ]

1 голос
/ 24 марта 2019

Вам нужно поместить начальную и конечную заливку за пределы цикла, как если бы она просто заполняла одну строку за раз

# Draws red octagon
turtle.penup()
turtle.goto(-100,-220)
turtle.pensize(10)
turtle.color("red")
turtle.fillcolor("red")
turtle.begin_fill()
for i in range(8):
    turtle.pendown()
    turtle.forward(185)
    turtle.right(5)
    turtle.left(50)
turtle.end_fill()
0 голосов
/ 24 марта 2019

Я вижу две проблемы с вашим кодом.Во-первых, вы помещаете begin_fill() и end_fill() в вашу петлю октогона - они должны быть обернуты вокруг петли, а не быть ее частью.Во-вторых, вы, как правило, делаете вещи более сложными, чем необходимо, включая добавление кода, который не имеет отношения к вашему результату (например, stamp(), shapesize(), setheading() и т. Д.).Вот упрощенная переделка вашего кода с фиксированной заливкой:

from turtle import Screen, Turtle

SIDE = 200
PEN_SIZE = 10
FONT_SIZE = 150
FONT = ("Arial", FONT_SIZE, "bold")

screen = Screen()
screen.bgcolor("black")

turtle = Turtle()
turtle.hideturtle()
turtle.pensize(PEN_SIZE)
turtle.penup()

# Draw white octagon with red fill
turtle.goto(-SIDE/2, -SIDE/2 + -SIDE/(2 ** 0.5))  # octogon geometry
turtle.color("white", "red")  # color() sets both pen and fill colors
turtle.pendown()

turtle.begin_fill()
for _ in range(8):
    turtle.forward(SIDE)
    turtle.left(45)
turtle.end_fill()

turtle.penup()

# Write "STOP"
turtle.goto(0, -FONT_SIZE/2)  # roughly font baseline
turtle.pencolor("white")

turtle.write("STOP", align="center", font=FONT)  # write() doesn't need pendown()

screen.exitonclick()
...