Нарисуйте круг с прямоугольниками черепаха питона

Я хочу нарисовать многоугольник (эту форму), зная длину и ширину прямоугольника, а также количество прямоугольников,

введите здесь описание изображения

И вот мой код:

from turtle import *

color('black')
begin_fill()
length = 50
width = 20
num_of_rectangles = 8
for i in range(num_of_rectangles):
    forward(length)
    right(90)
    forward(width)
    right(90)
    forward(length)
    right(90)
    forward(width)
    right(90)
    penup()
    circle(50, 180/num_of_rectangles, 4)
    pendown()

done()

Но этот код не отображает желаемую фигуру, так как же я могу нарисовать фигуру выше?


person Zeyad Etman    schedule 02.06.2020    source источник


Ответы (4)


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

from turtle import *

color('black')
begin_fill()
length = 50
width = 20
num_of_rectangles = 8
for i in range(num_of_rectangles):
    # go to corner:
    penup()
    forward(length/2)
    right(90)
    forward(width/2)
    right(90)
    pendown()
    # draw rectangle:
    forward(length)
    right(90)
    forward(width)
    right(90)
    forward(length)
    right(90)
    forward(width)
    right(90)
    penup()
    # go back to centre:
    penup()
    forward(length/2)
    right(90)
    forward(width/2)
    left(90)
    pendown()
    # turn
    right(180/num_of_rectangles)

done()
person Simon Crane    schedule 02.06.2020

Вместо того, чтобы рисовать прямоугольники как 4 штриха, вы можете нарисовать их как 5, начиная и заканчивая серединой одной из сторон. Вам также нужно добраться до середины этой стороны пером вверх, а затем обратно в центр (снова пером вверх):

from turtle import *

color('black')
begin_fill()
length = 50
width = 20
num_of_rectangles = 8
penup()
for i in range(num_of_rectangles):
    # Get to middle of side and orient for drawing
    forward(width / 2)
    right(90)
    pendown()
    # Draw rectangle in 5 strokes
    forward(length / 2)
    right(90)
    forward(width)
    right(90)
    forward(length)
    right(90)
    forward(width)
    right(90)
    forward(length / 2)
    penup()
    # Reorient and get back to center
    left(90)
    backward(width / 2)
    right(180/num_of_rectangles)

done()
person Amitai Irron    schedule 02.06.2020

Вы используете неправильное количество прямоугольников (вам нужно всего 6, а не 8) и неправильное соотношение сторон для ваших прямоугольников. (Это ближе к 50x32, чем к 50x20.) Некоторые из других предлагаемых решений наследуют те же ошибки, используют слишком много кода для решения проблемы и не выглядят как предоставленное изображение:

from turtle import Screen, Turtle

WIDTH, HEIGHT = 200, 130
RADIUS = 120
PEN_WIDTH = 8

turtle = Turtle()
turtle.hideturtle()
turtle.width(PEN_WIDTH)

for _ in range(6):
    turtle.penup()
    turtle.circle(RADIUS, extent=30)
    turtle.pendown()

    turtle.left(57)

    for _ in range(2):
        turtle.forward(WIDTH)
        turtle.left(90)
        turtle.forward(HEIGHT)
        turtle.left(90)

    turtle.right(57)

screen = Screen()
screen.exitonclick()

введите здесь описание изображения

Чтобы изменить размер изображения, умножьте или разделите WIDTH, HEIGHT, RADIUS и PEN_WIDTH на один и тот же коэффициент.

person cdlane    schedule 02.06.2020

Вот что:

from turtle import *
ht() # Hides turtle
w,h,n = 130,200,6 # Set the width,height & amount of rectangles
for _ in range(n):
    pu()
    fd(h//2) # Note the double slashes to avoid error
    pd()
    for f in [w//2,h,w,h,w//2]:
        rt(90)
        fd(f)
    pu()
    rt(90)
    fd(h//2)
    rt(180-180//n)

image

person Ann Zen    schedule 04.06.2020