Задача Задача №3761683
А
А
Вот рабочий код на Python Turtle — он рисует такого медвежонка из кругов. Сначала идёт рисунок, потом короткое объяснение принципа.
import turtle
import math
BG = "#1b1b1b" # цвет доски
PEN = "white" # цвет мела
screen = turtle.Screen()
screen.setup(700, 650)
screen.bgcolor(BG)
screen.title("Медвежонок из кругов")
t = turtle.Turtle()
t.speed(0)
t.hideturtle()
t.pensize(3)
t.color(PEN, BG)
def disc(x, y, r):
"""Закрашенный круг с центром (x, y)."""
t.penup()
t.goto(x, y - r) # нижняя точка круга
t.setheading(0) # смотрим вправо
t.pendown()
t.begin_fill()
t.circle(r)
t.end_fill()
def ring(x, y, r):
"""Контурный круг с центром (x, y)."""
t.penup()
t.goto(x, y - r)
t.setheading(0)
t.pendown()
t.circle(r)
def arc(cx, cy, r, a1, a2, n=90):
"""Дуга окружности от угла a1 до a2."""
t.penup()
for i in range(n + 1):
a = math.radians(a1 + (a2 - a1) * i / n)
x = cx + r * math.cos(a)
y = cy + r * math.sin(a)
if i == 0:
t.goto(x, y)
t.pendown()
else:
t.goto(x, y)
t.penup()
# 1. То, что должно быть позади: уши, руки, ноги
disc(-72, 205, 35) # левое ухо
disc(72, 205, 35) # правое ухо
disc(-120, -15, 42) # левая рука
disc(120, -15, 42) # правая рука
disc(-57, -170, 52) # левая нога
disc(57, -170, 52) # правая нога
# 2. Туловище и голова
disc(0, -40, 110) # туловище
disc(0, 130, 85) # голова
# 3. Глаза
ring(-35, 160, 16)
ring(35, 160, 16)
ring(-35, 160, 7)
ring(35, 160, 7)
# 4. Рот: нижняя полуокружность и верхняя линия
t.penup()
t.goto(-42, 95)
t.setheading(-90)
t.pendown()
t.circle(42, 180)
t.penup()
t.goto(-42, 95)
t.pendown()
t.goto(42, 95)
t.penup()
# 5. Две дуги-полоски на животе
arc(0, 115, 150, 235, 305)
arc(0, 83, 150, 235, 305)
# 6. Цветок из пяти кругов
for i in range(5):
a = math.radians(90 + i * 72)
ring(20 * math.cos(a), -55 + 20 * math.sin(a), 14)
turtle.done()
Как это работает
- В Turtle
circle(r)рисует круг не от центра, а от текущей точки на окружности. Поэтому в функцияхdiscиringчерепашка сначала ставится в нижнюю точку(x, y - r), смотрит вправо и только потом рисует круг. Тогда центр получается ровно в(x, y). - Рисуем слоями: сначала уши, руки и ноги, потом туловище, потом голову. Круги закрашиваются цветом фона, поэтому на пересечениях не видно лишних линий.
- Рот — это
circle(42, 180): второй параметр180означает половину круга. Именно поэтому на доске рядом сcircleнаписано180. - Цветок — цикл из пяти маленьких окружностей. Их центры стоят на окружности вокруг середины живота.
Проверить просто: запусти код, должен появиться белый контурный медвежонок на тёмном фоне. Если нужен белый лист, поменяй BG = "white", а PEN = "black".
