Исполнитель «Черепаха» используется в программировании и математике для визуализации движения по плоскости. В данной статье разберем, что важно знать для решения задач подобного типа на ЕГЭ.
Основные принципы работы исполнителя Черепаха
Черепаха передвигается по плоскости, ориентируясь в декартовой системе координат. В начальном положении её голова направлена вдоль положительного направления оси ординат (вверх), стоит отметить, что в библиотеке turtle она смотрит направо. Движение осуществляется с учетом следующих команд (в скобках обозначены команды из библиотеки turtle в Python):
- Поднять хвост (penup()) – движение без следа.
- Опустить хвост (pendown())– движение с оставлением следа.
- Вперёд n (forward(n)) – передвижение на n единиц в направлении головы.
- Назад n (back(n)) – передвижение на n единиц в противоположном направлении.
- Направо m (right(m)) – поворот на m градусов по часовой стрелке.
- Налево m (left(m))– поворот на m градусов против часовой стрелки.
Для решения данных задач также важно понимать, что такое область пересечения и объединения фигур.
Пересечение и объединение фигур
Пересечение – это общая часть двух фигур, где они накладываются друг на друга.
Объединение – это совокупность всех точек, принадлежащих хотя бы одной из фигур. Оно включает в себя как пересечение, так и оставшиеся части каждой фигуры.
Для вычисления периметра пересечения необходимо:
- Определить, где накладываются прямоугольники двух групп.
- Рассчитать периметр этой области, исключая повторяющиеся границы.
- Использовать графический метод или математические расчеты для точного измерения.
Пример №1
Исполнитель Черепаха действует на плоскости с декартовой системой координат. В начальный момент Черепаха находится в начале координат, её голова направлена вдоль положительного направления оси ординат, хвост опущен. При опущенном хвосте Черепаха оставляет на поле след в виде линии. В каждый конкретный момент известно положение исполнителя и направление его движения. У исполнителя существует 5 команд: Поднять хвост, означающая переход к перемещению без рисования; Опустить хвост, означающая переход в режим рисования; Вперёд n (где n – целое число), вызывающая передвижение Черепахи на n единиц в том направлении, куда указывает её голова; Назад n (где n – целое число), вызывающая передвижение в противоположном голове направлении; Направо m (где m – целое число), вызывающая изменение направления движения на m градусов по часовой стрелке, Налево m (где m – целое число), вызывающая изменение направления движения на m градусов против часовой стрелки.
Запись Повтори k [Команда1 Команда2 … КомандаS] означает, что последовательность из S команд повторится k раз.
Черепахе был дан для исполнения следующий алгоритм:
Повтори 10 [Вперёд 22 Направо 90 Вперед 16 Направо 90]
Поднять хвост
Вперед 1 Направо 90 Вперёд 1 Налево 90
Опустить хвост
Повтори 10 [Вперёд 72 Направо 90 Вперёд 79 Направо 90]
Определите периметр области пересечения фигур, ограниченных заданными алгоритмом линиями.
Решение
Разбор алгоритма
Первый блок команд:
Повтори 10 [Вперёд 22 Направо 90 Вперёд 16 Направо 90]
Эти команды формируют прямоугольник с длинами сторон 22 и 16. Поскольку команда повторяется 10 раз, получается 10 таких прямоугольников, выстроенных в ряд.
Второй блок команд:
Поднять хвост
Вперёд 1 Направо 90 Вперёд 1 Налево 90
Опустить хвост
Этот блок команд отвечает за смещение черепахи на 1 единицу вправо и вниз без рисования.
Третий блок команд:
Повтори 10 [Вперёд 72 Направо 90 Вперёд 79 Направо 90]
Этот фрагмент кода создает новый набор из 10 прямоугольников, но с размерами 72 и 79, которые расположены со смещением относительно первых.
Напишем программу на языке программирования Python с использованием библиотеки turtle.
Описание алгоритма
- Инициализация и настройка:
Устанавливается коэффициент k = 10, который масштабирует размеры фигур.
Отключается анимация (tracer(0)) для ускорения отрисовки.
Устанавливается начальное направление движения (вверх).
Опускается хвост, чтобы черепаха оставляла след. - Построение первой группы фигур:
Выполняется цикл из 10 повторений, рисующий 10 прямоугольников размером 22×16, расположенных в ряд. - Смещение без рисования:
Черепаха поднимает хвост и смещается на 1 шаг вправо и вниз.
Хвост снова опускается для рисования второй группы фигур. - Построение второй группы фигур:
Аналогично первой группе, строится еще 10 прямоугольников размером 72×79, но уже со смещением относительно первой группы. - Добавление точек:
В цикле черепаха проходит координатную сетку от -30k до 30k, ставя красные точки через каждые k единиц. - Завершение работы:
Выполняется команда done(), завершающая выполнение программы.
В данном алгоритме пересечение двух групп прямоугольников формирует отдельную область, периметр которой необходимо вычислить.
Отобразим результат работы исполнителя черепаха и укажем длины сторон области пересечения фигур.
21+21+15+15=72
Ответ: 72
Пример №2
Исполнитель Черепаха действует на плоскости с декартовой системой координат. В начальный момент Черепаха находится в начале координат, её голова направлена вдоль положительного направления оси ординат, хвост опущен. При опущенном хвосте Черепаха оставляет на поле след в виде линии. В каждый конкретный момент известно положение исполнителя и направление его движения. У исполнителя существует 5 команд: Поднять хвост, означающая переход к перемещению без рисования; Опустить хвост, означающая переход в режим рисования; Вперёд n (где n – целое число), вызывающая передвижение Черепахи на n единиц в том направлении, куда указывает её голова; Назад n (где n – целое число), вызывающая передвижение в противоположном голове направлении; Направо m (где m – целое число), вызывающая изменение направления движения на m градусов по часовой стрелке, Налево m (где m – целое число), вызывающая изменение направления движения на m градусов против часовой стрелки.
Запись Повтори k [Команда1 Команда2 … КомандаS] означает, что последовательность из S команд повторится k раз.
Черепахе был дан для исполнения следующий алгоритм:
Повтори 3 [Вперёд 7 Направо 90 Вперёд 12 Направо 90]
Поднять хвост
Вперёд 4 Направо 90 Вперёд 6 Налево 90
Опустить хвост
Повтори 4 [Вперёд 83 Направо 90 Вперёд 77 Направо 90]
Определите, сколько точек с целочисленными координатами будут находиться внутри объединения фигур, ограниченных заданными алгоритмом линиями, включая точки на границах этого объединения.
Решение:
Отобразим результат работы исполнителя черепаха и укажем длины сторон области пересечения фигур.
Можно заметить, что во втором цикле алгоритма рисуется большой прямоугольник. Чтобы не вычислять все эти точки самостоятельно, важно помнить, что в действиях передвижения робота указывается длина его сдвига. А чтобы узнать количество точек, нужно прибавить к длине 1. То есть количество точек на сторонах нашего большого прямоугольника будет равно 78 и 84. Количество точек большого прямоугольника (включая точки на линиях) = 78 × 84.
Найдем количество точек второго прямоугольника, которые не будут относиться к большому прямоугольнику. Для этого его можно визуально разбить на два маленьких прямоугольника размером 4 × 13 и 4 × 6.
Посчитаем количество точек с целочисленными координатами, которые будут находиться внутри объединения фигур, ограниченных заданными алгоритмом линиями, включая точки на границах этого объединения.
78 × 84 + 4 × 13 + 4 × 6 = 6552 + 52 + 24 = 6628
Ответ: 6628
Пример №3
Разберем задачу в которой сложно (но можно) посчитать количество точек самостоятельно. В ней гораздо удобнее использовать способ автоматизированного подсчета точек с помощью метода find_overlapping().
Исполнитель Черепаха действует на плоскости с декартовой системой координат. В начальный момент Черепаха находится в начале координат, её голова направлена вдоль положительного направления оси ординат, хвост опущен. При опущенном хвосте Черепаха оставляет на поле след в виде линии. В каждый конкретный момент известно положение исполнителя и направление его движения. У исполнителя существует 6 команд: Поднять хвост, означающая переход к перемещению без рисования; Опустить хвост, означающая переход в режим рисования; Вперёд n (где n – целое число), вызывающая передвижение Черепахи на n единиц в том направлении, куда указывает её голова; Назад n (где n – целое число), вызывающая передвижение в противоположном голове направлении; Направо m (где m – целое число), вызывающая изменение направления движения на m градусов по часовой стрелке, Налево m (где m – целое число), вызывающая изменение направления движения на m градусов против часовой стрелки.
Запись Повтори k [Команда1 Команда2 … КомандаS] означает, что последовательность из S команд повторится k раз.
Черепахе был дан для исполнения следующий алгоритм:
Направо 90
Повтори 3 [Направо 45 Вперёд 10 Направо 45]
Направо 315 Вперёд 10
Повтори 2 [Направо 90 Вперёд 10].
Определите, сколько точек с целочисленными координатами будут находиться внутри области, которая ограничена линией, заданной алгоритмом. Точки на линии учитывать не следует.
Решение:
В алгоритме видно, что у нас появляется новые методы:
- begin_fill() - начать заливку области
- end_fill() - закончить заливку области
- getcanvas() - возвращает нам наш холст (рабочую поверхность)
Если нас спрашивают в задании найти количество точек, ограниченной линией, то мы используем canvas.find_overlapping(x,y,x,y) == (5, )
Если нас спрашивают в задании найти количество точек, ограниченной линией и на самой линии, то мы используем canvas.find_overlapping(x,y,x,y) == ()
Ответ: 203.
Понравилась статья? Хочешь лучше понимать информатику, программирование и разбираться в различных программах? Тогда поддержи лайком, подпишись на канал и поделись материалом с друзьями! Если у тебя остались вопросы или что-то стало неясно — смело спрашивай в комментариях!
Читайте также: