@WSGlebKavash

Как закрасить объединение или пересечение фигур в turtle?

Условие:
Исполнитель Черепаха действует на плоскости с декартовой системой координат. В начальный момент Черепаха находится в начале координат, её голова направлена вдоль положительного направления оси ординат, хвост опущен. При опущенном хвосте Черепаха оставляет на поле след в виде линии.

В каждый конкретный момент известно положение исполнителя и направление его движения.

У исполнителя есть четыре команды:
Вперёд n (где n — целое число) — передвижение Черепахи на n единиц в том направлении, куда указывает её голова;
Направо m (где m — целое число) — изменение направления движения на m градусов по часовой стрелке;
Опусти — Черепаха опускает хвост;
Подними — поднимает хвост.

Запись Повтори k [Команда1 Команда2 ... КомандаS] означает, что последовательность из S команд повторится k раз.

Черепахе был дан для исполнения такой алгоритм:

Вперёд 15 Направо 90 Вперёд 3 Направо 45 Вперёд 5√ 2-5
Повтори 3 [Вперёд 5 Направо 45]
Налево 45 Вперёд 5√ 2-5 Налево 135 Назад 3 Подними Вперёд 8 Опусти
Повтори 8 [Вперёд 6 Налево 45]

Определите, сколько точек с целочисленными координатами будут находиться внутри пересечения двух фигур. Точки на линии учитывать не следует.
Код:
from turtle import *
seth(90)
scale=20
cnt=0
screensize(2000, 2000)
tracer(0)

begin_fill()
forward(15*scale)
right(90)
forward(3*scale)
right(45)
forward((5 * (2 ** 1/2) - 5)* scale)
for i in range(3):
    forward(5*scale)
    right(45)
left(45)
forward((5 * (2 ** 1/2) - 5)* scale)
left(135)
back(3*scale)
up()
forward(8*scale)
down()
for i in range(8):
    forward(6*scale)
    left(45)
end_fill()
canvas = getcanvas()
for x in range(0, 23):
    for y in range(4, 12):
        if canvas.find_overlapping(x*scale, y*scale, x*scale, y*scale) == (5,):
            cnt+=1

up()
update()
exitonclick()
print(cnt)
Для решения задачи используется черепашья графика. Подчёт ведётся путём поиска закрашенных точек внутри области. Однако данный алгоритм хорошо работает только если на выходе получается одна фигура. Если фигур несколько, то закрашивается либо часть, либо всё кроме нужного.
Как с помощью Turtle можно найти объединения и пересения фигур? Как автоматизировать подчёт точек внутри области? ВНИМАНИЕ Кумир использовать запрещено?
  • Вопрос задан
  • 15 просмотров
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы