В прошлой статье мы научились работать с функциями черепахи из модуля turtle, узнали разницу между пересечением и объединением фигур и опробовали на практике алгоритм решения 6 заданий первого типа.
В данной статье мы продолжим работу с этим заданием, но уделим внимание второму типу – будем находить периметр и площадь внутри объединения и пересечения фигур.
Не будем долго затягивать и приступим к практике!
Алгоритм решения
Изменения в коде решения у нас будут минимальны. Самое главное – задать точкам цвет фона, обычно – белый, и увеличить их размер. То есть первый блок кода нашего решения может выглядеть так:
По сравнению с тем, что был использован в прошлой статье, здесь изменены значения всего двух переменных – dot_color и dot_size.
Также для расстановки точек в последнем блоке больше не нужно подбирать какие-то определённые диапазоны. При достаточной мощности компьютера можете расставить точки хоть на диапазоне координат от -50 до 50. Но все же лучше хотя бы примерно понять квадрант, в котором располагаются фигуры, и сократить диапазоны до минимума.
В остальном же код остаётся прежним. Давайте опробуем его на задании с такой формулировкой (как и в прошлый раз, ограничимся лишь алгоритмом черепахи и условием):
«Черепахе был дан для исполнения следующий алгоритм:
Повтори 9 [Вперёд 17 Налево 90 Вперед 8 Налево 90 Вперёд 17]
Поднять хвост
Налево 90 Вперед 3 Направо 90 Вперёд 5 Налево 90
Опустить хвост
Повтори 4 [Вперёд 97 Направо 90 Вперёд 132 Направо 90]
Определите периметр области пересечения фигур, ограниченных заданными алгоритмом линиями.»
Первая фигура у нас чертится по такому алгоритму: Повтори 9 [Вперёд 17 Налево 90 Вперед 8 Налево 90 Вперёд 17]. Переведём его на язык Python:
Далее черепаха перемещается с поднятым хвостом к началу второй фигуры: Налево 90 Вперед 3 Направо 90 Вперёд 5 Налево 90
В Python это выглядит так:
Ну и вторая фигура задана таким алгоритмом: Повтори 4 [Вперёд 97 Направо 90 Вперёд 132 Направо 90]. Перепишем его в Python:
К этим трём блокам кода добавляем блоки с базовой настройкой и размещением точек. В итоге наша программа приобретает такой вид:
Запустим её и увидим такое изображение на экране.
Прямоугольник с двумя пунктирными зелёными и оранжевыми сторонами –как раз тот, периметр которого нам нужно вычислить. Что же, отрезков немного, можно посчитать и вручную.
Ширина этого прямоугольника равна 5 единичным отрезкам, а длина – 12. Складываем все стороны: 5 + 5 + 12 + 12. И получаем ответ на это задание: 34.
Пример 1
Только что мы работали с периметром пересечения. Но порой требуется найти и периметр объединения нескольких фигур. Правда, в таких случаях формулировка звучит несколько иначе:
«Черепахе был дан для исполнения следующий алгоритм:
Повтори 3 [Опустить хвост
Повтори 2 [Вперёд 10 Направо 90 Вперёд 10 Направо 90]
Поднять хвост
Вперёд 5 Направо 90 Вперёд 5 Направо 90]
Определите в сантиметрах длину замкнутой ломаной, которая является границей объединения фигур, очерченных заданными алгоритмом линиями. В ответе укажите только число. Единицы измерения указывать не нужно.»
Не переживайте, в алгоритме черепахи нет опечаток. Он действительно задаёт всего одну фигуру, но довольно сложную. При решении главное – чётко определить, какие действия в каком цикле должны быть расположены.
Давайте буквально построчно переписывать алгоритм. Фраза «Повтори 3» на Python переводится как «for _ in range(3):». Затем следует команда «Опустить хвост» или же в интерпретации модуля turtle – pd().
Ну а второй цикл уже привычный: Повтори 2 [Вперёд 10 Направо 90 Вперёд 10 Направо 90]. Запишем его так:
Далее идёт оставшаяся часть алгоритма внутри первого цикла for:
Допишем в начало код базовой настройки, а в конец блок кода с расстановкой точек и получим такую программу:
Прежде чем её запускать, давайте подумаем, что же мы ожидаем увидеть на экране. Очевидно, что у нас будет какая-то сложная фигура, состоящая из трёх. Об этом говорит самый первый цикл for с тремя повторениями.
Теперь рассмотрим вложенный цикл на два повторения. В нём черепаха сначала идёт вперёд на 10 единиц, затем поворачивает направо на 90 градусов и снова вперёд на 10 и направо. То есть чертятся две стороны квадрата с длиной в 10 единиц. Учитывая, что цикл повторяется дважды, то можем предположить, что это будет целый квадрат со стороной 10.
Далее черепаха поднимает хвост и перемещается вверх и вправо на 5 единиц – то есть ровно на середину только что начерченного квадрата.
И далее снова повторяется отрисовка квадрата и переход к его центру. Значит, на экране у нас будет три квадрата, каждый из которых начинается из центра предыдущего.
Запустим код и убедимся в этом.
Отлично, все как мы и предполагали. Нам нужно найти длину замкнутой ломаной линии объединения этих трёх квадратов. Давайте выделим её цветом.
Длину стороны квадрата мы уже вычислили ранее. Также определили, что каждый новый квадрат начинается из центра предыдущего. То есть длина восьми маленьких участков ломаной равна половине длины стороны квадрата, а именно – 5.
Отметим все числа на рисунке (длины маленьких сторон на углах отметим по одному разу).
Осталось всего лишь сложить все имеющиеся значения. Вот они по часовой стрелке: 10 + 5 + 5 + 5 + 5 + 10 + 10 + 5 + 5 + 5 + 5 + 10. Итоговая сумма составила 80 единиц. Это число и запишем в ответ.
Пример 2
Теперь поработаем с площадью фигур. Начнём с такой формулировки:
«Черепахе был дан для исполнения следующий алгоритм:
Повтори 4 [Вперёд 19 Направо 90 Вперёд 30 Направо 90]
Поднять хвост
Вперёд 2 Направо 90 Вперёд 8 Налево 90
Опустить хвост
Повтори 4 [Вперёд 93 Направо 90 Вперёд 97 Направо 90]
Определите площадь области пересечения фигур, ограниченных заданными алгоритмом линиями.»
Алгоритм здесь классический, ничего необычного в нём нет. Просто переписываем его на языке Python. Выглядеть он будет так:
Уже имея опыт решения 6 заданий, можем сказать, что здесь будет два прямоугольника, второй, которые больше, смещён относительно первого на 2 и 8 единиц.
Давайте допишем программу полностью и запустим её.
В итоге имеем такое пересечение двух прямоугольников.
Отметим жёлтым цветом интересующую нас область.
Нужно вычислить её длину и ширину. Само собой, вручную считать мы это не будем. Давайте исходить из имеющихся данных – длины и ширины первой (зелёной) фигуры. Она задаётся таким алгоритмом: Вперёд 19 Направо 90 Вперёд 30 Направо 90. Отсюда можно сделать вывод, что её длина 30 единиц, а ширина – 19.
Далее рассмотрим, насколько смещена вторая фигура, а следовательно, и само пересечение. Это можно определить по перемещению черепахи с поднятым хвостом: Вперёд 2 Направо 90 Вперёд 8 Налево 90. То есть на 2 и 8 единиц соответственно. Отметим эти значения на изображении.
Теперь будет несложно подсчитать размеры сторон пересечения: от 30 отнимаем 8 и от 19 отнимаем 2. Получается, что длина пересечения равна 22, а ширина – 17.
Для вычисления площади нас осталось просто перемножить два этих числа. Получаем ответ – 374.
Пример 3
В заключение решим задание на площадь объединения фигур:
«Черепахе был дан для исполнения следующий алгоритм:
Повтори 3 [Вперёд 39 Направо 90 Вперёд 48 Направо 90]
Поднять хвост
Вперёд 27 Направо 90 Вперёд 24 Налево 90
Опустить хвост
Повтори 3 [Вперёд 29 Направо 90 Назад 18 Направо 90]
Определите площадь области объединения фигур, ограниченных заданными алгоритмом линиями»
Подробно останавливаться на коде уже не будем. Алгоритм всех передвижений черепахи запишем так:
Дополним программу базовой настройкой, цветом каждой фигуры и расстановкой точек:
Проверим результат работы программы.
Да, и вот тут пересечение фигур выполнено не совсем удачно. Что же, давайте поэтапно разберём, как двигалась черепаха.
Изначально она находилась в точке с координатами (0, 0), а её голова была направлена «вверх». Первым делом выполняются команды: Вперёд 39 Направо 90 Вперёд 48 Направо 90. То есть черепаха рисует две стороны прямоугольника с длинами 39 и 48 единиц.
Далее снова выполняются всё те же команды и прямоугольник дорисовывается полностью.
А на третьей итерации цикла for черепаха перемещается в правый верхний угол фигуры и поворачивается головой «вниз».
Далее идёт перемещение с поднятым хвостом вперёд на 27 единиц.
После чего черепаха поворачивает налево и сдвигается еще на 24 единицы.
Повернувшись направо на 90 градусов, она приступает к рисованию второй фигуры. Её уже подробно разбирать не будем. Нам здесь важно, что одна из сторон пересечения одновременно будет и стороной второй фигуры. И длина этой стороны равняется 18.
Осталось лишь найти вторую сторону пересечения. На изображении она отмечена синим цветом.
Найти её несложно – достаточно от длины меньшей стороны первой фигуры (39) отнять первое перемещение черепахи с поднятым хвостом (27).
В итоге получим, что длина искомой стороны пересечения равна 12.
Теперь можем найти площадь объединения фигур. Для этого достаточно найти площадь каждой фигуры, сложить полученные значение и вычесть из этой суммы площадь пересечения. Запишем это выражение: 39 × 48 + 29 × 18 – 18 × 12 = 2178.
Число 2178 и будет ответом на это задание.
Больше заданий данного типа с подробным решением вы можете найти в нашем тренажёре