Задача Задача №3761753
А
А
Готовый вариант на Python с модулем turtle: фигура собирается из окружностей, полуокружностей и овалов.
import turtle
import math
screen = turtle.Screen()
screen.setup(800, 800)
screen.title("Панда из окружностей")
screen.bgcolor("white")
screen.tracer(0)
t = turtle.Turtle()
t.hideturtle()
t.speed(0)
t.pensize(3)
t.color("black")
def circle_at(x, y, r, fill=None):
"""Окружность с центром (x, y) и радиусом r."""
t.penup()
t.goto(x, y - r)
t.setheading(0)
t.pendown()
if fill is None:
t.circle(r)
else:
t.fillcolor(fill)
t.begin_fill()
t.circle(r)
t.end_fill()
t.penup()
def ellipse_at(cx, cy, rx, ry):
"""Овал с центром (cx, cy)."""
t.penup()
for i in range(361):
a = math.radians(i)
x = cx + rx * math.cos(a)
y = cy + ry * math.sin(a)
if i == 0:
t.goto(x, y)
t.pendown()
else:
t.goto(x, y)
t.penup()
def arc(cx, cy, rx, ry, a1, a2, steps=120):
"""Дуга овала от угла a1 до a2."""
t.penup()
for i in range(steps + 1):
a = math.radians(a1 + (a2 - a1) * i / steps)
x = cx + rx * math.cos(a)
y = cy + ry * math.sin(a)
if i == 0:
t.goto(x, y)
t.pendown()
else:
t.goto(x, y)
t.penup()
def line(x1, y1, x2, y2):
t.penup()
t.goto(x1, y1)
t.pendown()
t.goto(x2, y2)
t.penup()
# Руки и ноги
circle_at(-125, -35, 30)
circle_at(125, -35, 30)
ellipse_at(-58, -168, 43, 48)
ellipse_at(58, -168, 43, 48)
# Туловище
ellipse_at(0, -55, 105, 115)
# Три полоски на животе
arc(0, -20, 95, 8, 180, 360)
arc(0, -40, 100, 8, 180, 360)
arc(0, -60, 103, 8, 180, 360)
# Цветок из пяти окружностей
for i in range(5):
a = math.radians(90 + i * 72)
x = 15 * math.cos(a)
y = -45 + 15 * math.sin(a)
circle_at(x, y, 17)
# Уши
circle_at(-64, 225, 40)
circle_at(64, 225, 40)
# Голова
circle_at(0, 145, 85)
# Глаза
for ex in (-33, 33):
circle_at(ex, 173, 22, fill="white")
circle_at(ex * 0.8, 169, 8, fill="black")
# Улыбка: нижняя половина окружности
t.penup()
t.goto(-48, 125)
t.setheading(-90)
t.pendown()
t.circle(48, 180) # 180° — ровно половина окружности
t.penup()
# Верхняя линия рта
line(-48, 125, 48, 125)
screen.update()
screen.exitonclick()
Как это работает
t.circle(r)рисует окружность. Важно: черепашка начинает не из центра, а с нижней точки окружности. Поэтому вcircle_at()сначала выполняется переход в точку(x, y - r), и только потом рисуется круг — так его центр оказывается в(x, y).t.penup()иt.goto()переносят черепашку без линии.t.setheading(-90)направляет черепашку вниз. После этогоt.circle(48, 180)рисует нижнюю половину окружности — получается улыбка.- Овалы — это растянутые окружности: для них отдельно задаются радиус по
xи поy. - Симметрия держится за счёт противоположных координат: уши
±64, глаза±33, руки±125.
Проверка
Сохрани код как panda.py и запусти:
python panda.py
Должно открыться окно с пандой. Нажми на окно, чтобы закрыть его. Если какая-то деталь съехала, меняй её координаты x, y — остальная фигура не сломается.
