Урок 4. Абсолютность и относительность

Тема: Язык программирования Logo

Подними перо, опусти перо

Когда мы перемещае черепаху с помощью команд вперёд и назад, то она рисует линии. По идее... Но на самом деле может и не рисовать. В этом случае перед командами вперёд и назад используется команда перо_подними, заставляющая нашего робота-черепаху оторвать от холста то, чем он рисует. Поэтому последующее выполнение команд вперёд и назад приводит к перемещению черепахи на указанное расстояние, но никаких следов при этом она уже не оставляет (перо-то поднято!).

Для того чтобы черепаха снова начала рисовать, надо перо опустить с помощью команды перо_опусти. После этого команды будут работать так, как это задумано с самого начала – рисовать линии.

По умолчанию перо опущено. Это значит, что если вы не командовали роботу поднимать перо, то значит он будет рисовать.

Рассмотрим такую последовательность команд:

сброс
вперёд 70
перо_подними
вперёд 50
перо_опусти
вперёд 40

В результате выполнения на холсте получится следующее:

Команды подними_перо и опусти_перо. Программирование на Logo

Сначала черепаха прошлась вперёд на 70 точек и оставила за собой линию. Затем она подняла перо и прошагала вперёд еще на 50 точек. Но поскольку перо было поднято, то линии за собой она не оставила. Далее поступила команда опустить перо и идти вперёд еще на 40 точек. Т.к. перо было предварительно опущено, мы видим линию на протяжении этих 40 точек.

Задание

Получите такое изображение на холсте, как представлено ниже. При этом команды иди и направление должны использоваться всего один раз (вначале программного кода после команды сброс).

Команды подними_перо и опусти_перо в Лого (KTurtle)

В чем смысл относительности

Не будем забывать, что команда иди просто перемещает черепаху без вычерчивания линий. Если подумать, то команда иди заменяет целых две команды перо_подними и вперёд (или назад). В обоих случаях черепаха будет перемещаться без рисования линий.

Так зачем же был придуман такой избыточный набор команд для нашего робота. Ведь можно было ограничиться командами иди и вперёд (назад). Первая служила бы только для перемещения без рисования, а вторые – для перемещения с рисованием. Зачем же нужно поднимать перо, а затем шагать без рисования командой, которая изначально придумана для рисования?

Действительно, можно было бы ограничиться только командами иди и вперёд. Однако их использование не всегда удобно. Например, вам требуется рисовать пунктирную линию, где расстояние между черточками должно быть равно 20 точкам. Если вы будете использовать только команды иди и вперёд, то придется каждый раз вычислять координату начала очередной черточки. Это будет сделать очень трудно, если пунктирная линия идет не по горизонтали и не по вертикали, а как-нибудь наискосок. Или другой пример. После рисования какого-нибудь элемента на холсте, вы уже не знаете, где стоит черепаха (ее координаты), но знаете, что вам надо отступить вправо на 45 точек. Проще будет поднять перо, повернуть черепаху и выполнить команду вперёд (или назад), чем вычислять координаты исходя из начальных значений и пройденного черепахой пути.

Итак, команда иди принимает точные (абсолютные) координаты нашей координатной плоскости (холста), а команды вперёд и назад перемещают черепаху относительно ее текущего положения на указанную величину. Где бы ни стояла черепаха, команда иди 10, 20 всегда переместит ее в начало холста, отступив от краев 10 точек по x и 20 точек по y. Где окажется черепаха после команды вперёд 100 зависит от того, где она была до этого и как была повернута.

Относительные повороты

На прошлом занятии мы изучили команду направление. Это команда принимает абсолютные величины. Для нее есть север-верх (0 градусов), восток-право (90), юг-низ (180) и запад-лево (270), а также промежуточные абсолютные направления. Как бы ни была повернута черепаха, команда направление 135 абсолютно всегда заставит ее повернуть голову на юго-восток (вниз и вправо).

Но что, если мы сначала повернули черепаху по направлению в 135 градусов на нашей абсолютной окружности, а теперь нам потребовалось повернуть ее на 77 градусов против часовой стрелки. Для того, чтобы определить новое абсолютное направление следует из 135 вычесть 77 (вычесть, т.к. поворачиваем против часовой стрелки). Но куда проще было бы просто сказать роботу налево 77 и ничего не вычислять. Робот-черепаха повернется на 77 градусов против часовой стрелки относительно его текущего положения.

Действительно в языке программирования Logo предусмотрены команды относительного поворота – налево и направо. Эти команды используются даже чаще, чем команда направление. Однако команда направление может быть очень полезна. Например, вы крутили и вертели черепаху, а потом вам надо направить ее в четко определенное направление (например, точно вправо). Команда направление 90 решит все проблемы.

Задание

Напишите код, в результате выполнения которого черепашка рисовала бы на холсте представленные ниже фигуры. Обязательно используйте команды налево и направо.

Программирование на языке Logo

Ответ (код на Лого)

Программирование в среде KTurtle

Ответ (код на Лого)