Исполнитель черепашка перемещается на экране компьютера


Пример 2. Ис­пол­ни­тель Че­ре­паш­ка пе­ре­ме­ща­ет­ся на экра­не ком­пью­те­ра, остав­ляя след в виде линии — Студопедия

Поделись  

Ис­пол­ни­тель Че­ре­паш­ка пе­ре­ме­ща­ет­ся на экра­не ком­пью­те­ра, остав­ляя след в виде линии. В каж­дый кон­крет­ный мо­мент из­вест­но по­ло­же­ние ис­пол­ни­те­ля и на­прав­ле­ние его дви­же­ния. У ис­пол­ни­те­ля су­ще­ству­ет две ко­ман­ды: Вперёд n (где n — целое число), вы­зы­ва­ю­щая пе­ре­дви­же­ние Че­ре­паш­ки на n шагов в на­прав­ле­нии дви­же­ния; На­пра­во m (где m — целое число), вы­зы­ва­ю­щая из­ме­не­ние на­прав­ле­ния дви­же­ния на m гра­ду­сов по ча­со­вой стрел­ке. За­пись По­вто­ри k [Ко­ман­да1 Ко­ман­да2 Ко­ман­даЗ] озна­ча­ет, что по­сле­до­ва­тель­ность ко­манд в скоб­ках по­вто­рит­ся k раз.

Че­ре­паш­ке был дан для ис­пол­не­ния сле­ду­ю­щий ал­го­ритм: По­вто­ри 9 [Вперёд 70 На­пра­во 90]. Какая фи­гу­ра по­явит­ся на экра­не?

1) не­за­мкну­тая ло­ма­ная линия
2) пра­виль­ный де­вя­ти­уголь­ник
3) пра­виль­ный вось­ми­уголь­ник
4) пра­виль­ный четырёхуголь­ник

По­яс­не­ние: Вы­пол­няя ал­го­ритм, Че­ре­паш­ка остав­ля­ет след в виде оди­на­ко­вых от­рез­ков, рас­по­ло­жен­ных под углом 180° − 90° = 90° друг к другу. Такой угол со­став­ля­ют между собой сто­ро­ны пра­виль­но­го четырёхуголь­ни­ка. По­это­му за пер­вые че­ты­ре шага ал­го­рит­ма Че­ре­паш­ка на­ри­су­ет пра­виль­ный четырёхуголь­ник, а за сле­ду­ю­щие пять шагов прой­дет по четырём его сто­ро­нам ещё раз. Сле­до­ва­тель­но, остав­лен­ный Че­ре­паш­кой след пред­став­ля­ет собой пра­виль­ный четырёхуголь­ник

Помним, что: Сумма внут­рен­них углов вы­пук­ло­го n-уголь­ни­ка равна 180°(n − 2), по­это­му угол между его сто­ро­на­ми может быть най­ден по фор­му­ле 180°(1 − 2/n).

Ответ: 4.

Задачи

1. Исполнитель Черепашка перемещается на экране компьютера, оставляя след в виде линии. В каждый конкретный момент известно положение исполнителя и направление его движения. У исполнителя существуют две команды:

Вперед n (где n – целое число), вызывающая передвижение Черепашки на n шагов в направлении движения.

Направо m (где m – целое число), вызывающая изменение направления движения на m градусов по часовой стрелке.

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

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

Повтори 10 [Направо 36 Вперед 20 Направо 36]

Какая фигура появится на экране?

1) Правильный пятиугольник 3) Правильный десятиугольник
2) Правильный шестиугольник 4) Незамкнутая ломаная линия

2. Исполнитель Черепашка перемещается на экране компьютера, оставляя след в виде линии. В каждый конкретный момент известно положение исполнителя и направление его движения. У исполнителя существуют две команды:

Вперед n (где n – целое число), вызывающая передвижение Черепашки на n шагов в направлении движения.

Направо m (где m – целое число), вызывающая изменение направления движения на m градусов по часовой стрелке.

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

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

Повтори 6 [Вперед 5 Направо 30]

Какая фигура появится на экране?

1) незамкнутая ломаная линия 3) правильный пятиугольник
2) правильный треугольник 4) правильный шестиугольник

3. Исполнитель Черепашка перемещается на экране компьютера, оставляя след в виде линии. В каждый конкретный момент известно положение исполнителя и направление его движения. У исполнителя существуют две команды:

Вперед n (где n - целое число), вызывающая передвижение Черепашки на n шагов в направлении движения.

Направо m (где m – целое число), вызывающая изменение направления движения на m градусов по часовой стрелке.

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

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

Повтори 6 [Вперед 10 Направо 72]

Какая фигура появится на экране?

1) незамкнутая ломаная линия 3) правильный пятиугольник
2) квадрат 4) правильный шестиугольник

4. Исполнитель Чертежник перемещается на координатной плоскости, оставляя след в виде линии. Чертежник может выполнять команду Сместиться на (a, b) (где a, b — целые числа), перемещающую Чертежника из точки с координатами (x, y) в точку с координатами (x + a, y + b). Если числа a, b положительные, значение соответствующей координаты увеличивается, если отрицательные — уменьшается.

Например, если Чертежник находится в точке с координатами (5, 3), то команда Сместиться на (2, –3) переместит Чертежника в точку (7, 0).

Запись Повтори k раз



Юмина Кристина Юрьевна - ИСПОЛНИТЕЛЬ ЧЕРЕПАШКА

Понедельник, 19.12.2022, 16:23

Меню сайта

Полезные странички

Отбравить SMS сообщение БЕСПЛАТНО

ИСПОЛНИТЕЛЬ ЧЕРЕПАШКА           

Задание 1

Исполнитель Черепашка перемещается на экране компьютера, оставляя след в виде линии. В каждый конкретный момент известно положение исполнителя и направление его движения. У исполнителя существует две команды:

Вперёд n (где n  - целое число), вызывающая передвижение Черепашки на n шагов в направлении движения;

Направо m (где m  - целое число), вызывающая изменение направления движения на m градусов по часовой стрелке.

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

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

Повтори 9 [Вперёд 50 Направо 60]

Какая фигура появится на экране?

  1. Правильный треугольник
  2. Правильный шестиугольник
  3. Правильный девятиугольник
  4. Незамкнутая ломаная линия

Решение:

Ответ: 2

Задание 2

Исполнитель Черепашка перемещается на экране компьютера, оставляя след в виде линии. В каждый конкретный момент известно положение исполнителя и направление его движения. У исполнителя существуют две команды:

Вперёд n (где n – целое число), вызывающая передвижение Черепашки на n шагов в направлении движения.

Направо m (где m – целое число), вызывающая изменение направления движения на m градусов по часовой стрелке.

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

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

Повтори 6 [Направо 45 Вперёд 20 Направо 45]

Какая фигура появится на экране?

1)правильный шестиугольник

2)правильный восьмиугольник

3)квадрат

4)незамкнутая ломаная линия

Решение:

Ответ:3

Задание 3

Исполнитель Черепашка перемещается на экране компьютера, оставляя след в виде линии. В каждый конкретный момент известно положение исполнителя и направление его движения. У исполнителя существуют две команды:
Вперёд n, где n  целое число, вызывающая передвижение Черепашки на n шагов в направлении движения.

Направо m, где m – целое число, вызывающая изменение направления движения на m градусов по часовой стрелке.

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

Черепашке был дан для исполнения следующий алгоритм:
Повтори 6 [Вперёд 10 Направо 72]

Какая фигура появится на экране?

1)незамкнутая ломаная линия

2)квадрат

3)правильный пятиугольник

4)правильный шестиугольник

Решение:

Ответ:3

 

 

CC: изменено

CC: Tweaked — это мод для Minecraft, который добавляет в игру программируемые компьютеры, черепах и многое другое. Вилка всеми любимый ComputerCraft, он продолжает свое наследие с более высокой производительностью, стабильностью и множеством новых функций.

CC: Tweaked можно установить из CurseForge или Modrinth. Для этого требуется загрузчик модов Minecraft Forge, но версии доступны для Fabric.

Особенности

Управляемый с помощью языка программирования Lua компьютер CC: Tweaked предоставляет все инструменты, необходимые для запуска. написание кода и автоматизация вашего мира Minecraft.

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

Однако не все проблемы можно решить с помощью кирки, поэтому CC: Tweaked также предоставляет кучу дополнительных периферийных устройств. для ваших компьютеров. Вы можете воспроизводить мелодию через динамики, отображать текст или изображения на мониторе, подключать все свои компьютеры вместе с модемами и многое другое.

Компьютеры теперь также могут взаимодействовать с инвентарями, такими как сундуки, что позволяет создавать сложные инвентари и предметы. Системы управления.

Начало работы

Хотя ComputerCraft прекрасно подходит как для опытных программистов, так и для людей, которые никогда раньше не программировали, немного сложно начать. К счастью, есть несколько замечательных руководств:

  • Учебники Direwolf20 по ComputerCraft
  • Серия ComputerCraft компании Sethbling
  • Компьютерные основы Lyqyd 1

Когда вы немного познакомитесь с модом, боковая панель и ссылки ниже содержат более подробную документацию по модулю. различные API и периферийные устройства, предоставляемые модом.

Если вы застряли, задайте вопрос на GitHub или зайдите на IRC-канал ComputerCraft.

Примите участие

CC: изменены жизни на GitHub. Если у вас есть какие-либо идеи, отзывы или ошибки, пожалуйста, создайте проблему.

Глобальные

_G Функции в глобальной среде, определенные в bios.lua .
цвета Константы и функции для значений цвета, подходящие для работы с термом и редстоуном.
цветов Альтернативный вариант цветов для любителей британской орфографии.
команды Выполнять команды Minecraft и собирать данные из результатов с командного компьютера.
диск Взаимодействие с дисководами.
fs Взаимодействие с файлами и файловой системой компьютера, позволяющее управлять файлами, каталогами и путями.
GPS Используйте модемы для определения местоположения текущей черепахи или компьютеров.
help Поиск файлов справки на текущем компьютере.
http Выполнение HTTP-запросов, отправка и получение данных на удаленный веб-сервер.
io Эмулирует стандартную библиотеку ввода-вывода Lua.
keys Константы для всех «кодов клавиш» клавиатуры, поставленные в очередь событием клавиши.
multishell Multishell позволяет запускать несколько программ одновременно.
os API os позволяет взаимодействовать с текущим компьютером.
paintutils Утилиты для рисования более сложной графики, такой как пиксели, линии и изображения.
параллельный Простой способ запуска нескольких функций одновременно.
периферийное устройство Поиск и управление периферийными устройствами, подключенными к этому компьютеру.
pocket Управление текущим карманным компьютером, добавление или удаление обновлений.
rednet Связь с другими компьютерами с помощью модемов.
красный камень Получите и установите сигналы красного камня рядом с этим компьютером.
настройки Чтение и запись параметров конфигурации для CraftOS и ваших программ.
оболочка API-интерфейс оболочки обеспечивает доступ к интерфейсу командной строки CraftOS.
term Взаимодействие с компьютерным терминалом или мониторами, написание текста и рисование графики ASCII.
textutils Полезные утилиты для форматирования строк и управления ими.
черепаха Черепахи — это роботизированное устройство, которое может ломать и размещать блоки, атаковать мобов и перемещаться по миру.
вектор Базовый тип трехмерного вектора и некоторые распространенные векторные операции.
окно Перенаправление терминала, занимающее меньшую площадь существующего терминала.

Модули

cc.audio.dfpwm Преобразование между потоками аудиоданных DFPWM и списком амплитуд.
cc.completion Набор вспомогательных методов для работы с автозавершением ввода, таких как _G.read.
cc.expect Библиотека cc.expect предоставляет вспомогательные функции для проверки правильности формата аргументов функции и правильного типа.
cc.image.nft Чтение и рисование изображений nbt ("Nitrogen Fingers Text").
cc.pretty Симпатичный принтер для рендеринга структур данных в эстетически приятном виде.
cc.require Реализация встроенной функции require и библиотеки пакетов на чистом Lua.
cc.shell.completion Набор вспомогательных методов для работы с завершением оболочки.
cc.strings Различные утилиты для работы со строками и текстом.

Периферийные устройства

команда Это периферийное устройство позволяет вам взаимодействовать с командными блоками.
компьютер Компьютер или черепаха в качестве периферийного устройства.
привод Дисководы — это периферийные устройства, которые позволяют читать и записывать на дискеты и другие «монтируемые носители» (такие как компьютеры или черепахи).
модем Модемы позволяют отправлять сообщения между компьютерами на большие расстояния.
монитор Мониторы представляют собой блок, выполняющий роль терминала, отображающий информацию с одной стороны.
принтер Периферийное устройство принтера позволяет печатать страницы и книги.
динамик Периферийный динамик позволяет вашему компьютеру воспроизводить ноты и другие звуки.

Универсальные периферийные устройства

energy_storage Методы взаимодействия с блоками с использованием системы накопления энергии Forge.
Fluid_storage Методы взаимодействия с резервуарами и другими блоками хранения жидкости.
инвентарь Методы взаимодействия с инвентарем.

События

тревога Событие таймера запускается, когда тревога, запущенная с завершением os.setAlarm.
char Событие char запускается, когда на клавиатуре набирается символ .
computer_command Событие computer_command запускается, когда очередь /computercraft 9Команда 0053 выполняется для текущего компьютера.
disk Дисковое событие запускается, когда диск вставляется в соседний или сетевой диск.
disk_eject Событие disk_eject запускается, когда диск удаляется из соседнего или сетевого диска.
file_transfer Событие file_transfer ставится в очередь, когда пользователь перетаскивает файл на открытый компьютер.
http_check Событие http_check запускается после завершения проверки URL-адреса.
http_failure Событие http_failure запускается при сбое HTTP-запроса.
http_success Событие http_success запускается, когда HTTP-запрос успешно возвращается.
key Это событие запускается при нажатии любой клавиши, когда терминал находится в фокусе.
key_up Запускается всякий раз, когда клавиша отпускается (или терминал закрывается, пока клавиша нажата).
modem_message Событие modem_message запускается, когда сообщение получено по открытому каналу любого модема.
monitor_resize Событие monitor_resize запускается при изменении размера соседнего или сетевого монитора.
monitor_touch Событие monitor_touch запускается при щелчке правой кнопкой мыши на смежном или сетевом расширенном мониторе.
mouse_click Это событие возникает, когда терминал щелкают мышью.
mouse_drag Это событие запускается каждый раз, когда мышь перемещается, пока нажата кнопка мыши.
mouse_scroll Это событие возникает, когда в терминале прокручивается колесико мыши.
mouse_up Это событие запускается, когда кнопка мыши отпускается или удерживаемая мышь покидает терминал компьютера.
вставка Событие вставки запускается, когда текст вставляется в компьютер с помощью Ctrl-V (или ⌘V на Mac).
периферийное устройство Событие периферийного устройства запускается, когда периферийное устройство подключено сбоку или к модему.
периферий_детач Событие периферий_детач запускается, когда периферийное устройство отсоединено от стороны или от модема.
rednet_message Событие rednet_message запускается при отправке сообщения через Rednet.
красный камень Событие красного камня запускается всякий раз, когда меняются какие-либо входные данные красного камня на компьютере.
Speaker_audio_empty Возвращаемые значения
task_complete Событие task_complete запускается после завершения асинхронной задачи.
term_resize Событие term_resize запускается при изменении размера основного терминала.
завершение Событие завершения запускается при удерживании Ctrl-T.
timer Событие таймера запускается, когда таймер, запущенный с помощью os.startTimer, завершает работу.
черепаха_инвентарь Событие черепаха_инвентарь запускается при изменении инвентаря черепахи.
websocket_closed Событие websocket_closed запускается при закрытии открытого соединения WebSocket.
websocket_failure Событие websocket_failure запускается при сбое запроса на подключение WebSocket.
websocket_message Событие websocket_message запускается, когда сообщение получено по открытому соединению WebSocket.
websocket_success Событие websocket_success запускается, когда запрос на подключение WebSocket возвращается успешно.

Направляющие

Настройка GPS GPS API позволяет компьютерам и черепахам определять свое текущее положение с помощью беспроводных модемов.
Разрешение доступа к локальным IP-адресам По умолчанию ComputerCraft блокирует доступ к локальным IP-адресам в целях безопасности.
Воспроизведение звука с помощью динамиков CC: Периферийный динамик Tweaked предоставляет мощный способ воспроизведения любого звука с помощью метода Speaker.playAudio.
Повторное использование кода с помощью require Библиотека — это набор полезных функций и других определений, которые хранятся отдельно от вашей основной программы.

Ссылка

Функции Lua 5.2/5.3 в CC: Tweaked CC: Tweaked основан на среде выполнения Cobalt Lua, которая использует Lua 5.
Последнее обновление: 18 декабря 2022 г. Стиль логотипа Computer Science , том 1: Символьные вычисления 2/e Copyright (C) 1997 MIT
Брайан Харви
Калифорнийский университет, Беркли

Скачать PDF версию
Вернуться к оглавлению
ЗАДНЯЯ ЧАСТЬ резьба главы СЛЕДУЮЩАЯ
Массачусетский технологический институт Пресс-страница для стиля логотипа Computer Science

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

Исторически сложилось так, что идея о том, что логотип представляет собой главным образом изображение черепахи, ошибка. Как я упоминал в начале главы 1, имя Логоса происходит от греческого слова слов, , потому что Логос был первым разработан как язык, на котором можно манипулировать языком: словами и фразы. Тем не менее, графика черепах оказалась очень мощное дополнение к логотипу. Одна из причин заключается в том, что любая форма компьютера графика привлекает внимание. Но другие языки программирования разрешено графическое программирование перед логотипом. В этой главе мы рассмотрим по некоторым причинам черепаха графика, в частности, была такой большой прогресс в технологии программирования.

Эта глава не может быть достаточно длинной, чтобы рассматривать возможности компьютерная графика полностью. Моя цель — просто показать вам, что то же самое идеи, которые мы использовали со словами и списками, также плодотворным в совершенно другой проблемной области. Такие идеи, как местность, модульность и рекурсия тоже появляются здесь, хотя иногда в разные обличья.

Обзор или краткое введение

Я полагал, что вы уже познакомились с черепахой-логотипом. графика, либо в школе, либо читая Logo учебники. Если нет, возможно Вы должны прочитать одну из этих книг сейчас. Но на всякий случай вот очень краткий обзор примитивных процедур для черепашьей графики. Хотя некоторые версии Logo позволяют использовать более одной черепахи или позволяют динамических черепашек с программируемыми формами и скоростями, на данный момент Я буду рассматривать только традиционную одиночную статичную черепаху.

Введите команду cs (сокращение от clearscreen ), без входы. Эффект этой команды состоит в том, чтобы инициировать графику логотипа. способность. Черепаха появится в центре графического окна. (В зависимости от того, какая у вас версия логотипа, черепаха может выглядеть как настоящее животное с головой и четырьмя ногами или, как в логотипе Беркли, может быть представлен в виде треугольника.) Черепаха будет обращена к верхней части экран. Любой предыдущий графический рисунок будет стерт с экрана и из памяти компьютера.

Главное в черепахе то, что отличает ее от других метафоры для компьютерной графики, заключается в том, что черепаха указывает в определенном направлении и может двигаться только в этом направлении. (Оно может двигаться вперед или назад, как автомобиль с задней передачей, но не боком.) Чтобы рисовать в любом другом направлении, черепаха должна сначала поверните так, чтобы он смотрел в новом направлении. (В этом отношении отличается от автомобиля, который должен поворачиваться и двигаться одновременно.)

Основным средством перемещения черепахи является команда вперед , сокращенно fd . Вперед принимает один вход, который должен быть количество. Эффект вперед состоит в том, чтобы переместить черепаху в направление, на которое он смотрит, через расстояние, заданное входными данными. единицей расстояния является «шаг черепахи», небольшое расстояние, которое зависит от разрешения экрана вашего компьютера. (Как правило, одна черепаха Шаг — это наименьшая линия, которую может нарисовать ваш компьютер. Это немного упрощенным, хотя, потому что это наименьшее расстояние может быть разные в разных направлениях. Но размер шага черепахи делает , а не зависят от направления; это всегда одно и то же расстояние для любой данный компьютер.) Попробуйте ввести команду

 вперед 80 

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

Первые черепахи были настоящими роботами, которые катались по полу. Название «черепаха» они получили из-за твердые оболочки, окружающие их тонкие электронные внутренности. Робот у черепахи есть ручка в животе, которую она может опустить на пол, или подтянуть внутрь себя. Когда ручка опущена, черепаха рисует след его движения по полу.

Говоря об экранной черепахе, принято думать о экран как своеобразная карта, представляющая собой горизонтальный этаж. Следовательно, вместо того, чтобы ссылаться на направления экрана как «вверх», «вниз», «влево» и «вправо» мы говорим о направлениях по компасу на север, Юг, Запад и Восток. Теперь ваша черепаха смотрит на север. Кроме эта терминология лучше соответствует метафоре черепахи и позволяет избежать Возможна путаница: слово «левый» может означать либо черепаха слева или 9Осталось экрана 0013. (Они одинаковые направление прямо сейчас, но они не будут такими же после того, как мы изменим черепаха.) Чтобы избежать этой проблемы, мы используем «Запад» для левого края экран, и зарезервируйте слово "влево" для направления на влево от того, куда смотрит черепаха.

Логотип предоставляет примитивные команды для поднятия и опускания загона черепахи. Команда penup (сокращенно pu ) не требует ввода; это эффект заключается в том, чтобы поднять перо. Другими словами, после использования этого команда, любое дальнейшее движение черепахи не будет рисовать линии. Попробуй это сейчас:

 пенуп вперед 30 

Аналогично, команда pendown ( pd ) не принимает ввод и опускает перо. Вот процедура, которую вы можете попробовать:

 в тире :count повторить :count [penup вперед 4 pendown вперед 4] конец ?  приборная панель с прозрачным экраном 14  

Команда назад (или кб ) принимает один вход, который должен быть количество. Эффект назад состоит в том, чтобы переместить черепаху назад на расстояние, используемое в качестве входных данных. (Как вы думаете fd и bk подойдет, если вы дадите им нецелочисленные входные данные? Нулевые входы? Отрицательные входы? Попробуйте эти возможности. Затем посмотрите команды в справочном руководстве для вашей версии Logo и посмотрите, руководство полностью описывает команды.)

Чтобы повернуть черепаху, предусмотрены еще две команды. Левый (сокращенно lt ) принимает один вход, который должен быть числом. Его Эффект состоит в том, чтобы повернуть черепаху в сторону собственной черепахи слева. Угол, на который поворачивается черепаха, является входом; углы измеряется в градусах, поэтому слева 360 перевернет черепаху полностью вокруг. (Другими словами, что инструкция не имеет реального эффекта!) Другой способ сказать, что черепаха поворачивается влево, состоит в том, что он поворачивается на против часовой стрелки. Команда справа (или rt ) точно так же, как слева , за исключением что он поворачивает черепаху по часовой стрелке, вправо от себя.

»Очистите экран и попробуйте это, классическая начальная точка Logo графика черепахи:

 повтор 4 [вперед 100 вправо 90] 

Эта инструкция предписывает Logo нарисовать четыре линии по 100 символов каждая. шаги черепахи длинные, и поворачиваться на 90 градусов между линиями. В другом слов, он рисует квадрат.

В Logo есть много других черепашьих процедур, но это фундаментальные; с ними можно довольно далеко продвинуться в создании интересная компьютерная графика. Если у вас не было большого опыта с графикой черепахи раньше, вам может понравиться провести некоторое время изучение возможностей. Есть много вводных логотипов книжки с рисунками черепах вам в помощь. Потому что эта часть логотипа программирование настолько подробно описано в другом месте, что я не буду предлагать графические проекты здесь. Вместо этого я хочу продолжить рассмотрение некоторые из более глубоких проблем компьютерного программирования, которые освещается метафорой черепахи.

Локальные и глобальные описания

Ранее мы рассматривали разницу между локальными переменными, которые доступны только в рамках определенной процедуры, и глобальные переменные , которые используются во всем проекте. Я пытался убедить вас, что использование локальных переменных более мощный стиль программирования, чем тот, который опирается на глобальные переменные для всего. Во-первых, локальные переменные необходимо сделать рекурсию возможной; для одной процедуры решать большую проблему и меньшую подзадачу одновременно, каждый вызов процедуры должен иметь свои собственные независимые переменные. Но даже если рекурсия не является проблемой, сложная программа намного легче читать и понимать, если каждая процедура может быть понята не задумываясь о контексте, в котором оно используется.

Черепаший подход к компьютерной графике воплощает тот же принцип местности по-другому. Тот факт, что движение черепахи команды ( вперед и назад ) и команды поворота черепахи ( слева и справа ) все родственны черепахе означает, что графическая процедура не должна думать о большей картине.

Чтобы понять, что это значит, сравните метафору с черепахой с другой метафорой, которая обычно используется в компьютерных графика: Декартовы координаты. Эта метафора исходит из аналитической геометрии, изобретен Рене Декартом (1596-1650). Слово «картезианец» происходит от его имя. Цель Декарта состояла в том, чтобы использовать методы алгебры для решения геометрические задачи, используя чисел для описания точек. В двухмерной плоскости, такой как экран вашего компьютера, вам нужно два числа для обозначения точки. Эти числа работают как долгота и широта в географии: один говорит, как далеко точка находится левее или правильно, а другой говорит, как высоко это.

На этой диаграмме показан экран компьютера с сеткой горизонтальных и на нем нарисованы вертикальные линии. Точка, где встречаются две жирные линии называется источником ; представлен цифрами [0 0] . Для других точек первое число ( x-координата ) — горизонтальное расстояние от начала координат до точка, а второе число ( y-координата ) является расстояние по вертикали от начала координат до точки. Положительный x-координата означает, что точка находится справа от начала координат; а отрицательная координата x означает, что точка находится слева от источник. Точно так же положительная координата y означает, что точка над источником; отрицательная координата y помещает ее ниже начала координат. Логотип позволяет вам ссылаться на точки по их декартовым координатам, используя список из двух чисел. Исходная точка — это точка, где черепаха начинается, когда вы очищаете экран.

Основным инструментом для декартовой графики в Logo является команда установить позицию (для установить позицию ). Сетпос требуется один ввод, который должен быть списком из двух чисел. Его эффект заключается в том, чтобы переместить черепашку в точку на экране в те координаты. Если ручка опущена, черепаха рисует линию во время движения, точно так же, как для вперед и назад . Вот как ты может нарисовать квадрат, используя декартову графику вместо черепахи графика:

 очистить экран уставки [0 100] установкапос [100 100] установка [100 0] установка [0 0] 

Понимаете, почему я сказал, что картезианская метафора глобальна, как использование глобальных переменных? Каждая инструкция в этом квадрате принимает учитывать положение черепахи на экране в целом. «точка зрения», с которой мы рисуем картину, — это точка зрения наблюдатель, стоящий над самолетом и смотрящий на все это сверху вниз. Этот наблюдатель видит не только черепаху, но и края и центр экран как часть того, что имеет отношение к рисованию каждой линии. К Напротив, метафора геометрии черепахи принимает точку зрения сама черепаха; каждая линия рисуется независимо от того, где находится черепаха это в глобальном масштабе.

Используя метафору черепахи, мы можем нарисовать наш квадрат (или любую другую фигуру). мы можем программировать) в любом месте экрана в любой ориентации. Первый Я напишу команду квадратных :

 в квадрат :размер повторить 4 [вперед: размер вправо 90] конец 

Вот пример того, как квадрата можно использовать в различные положения и ориентации:

 к лицу квадрат 100 пенап вперед 20 справа 90 вперед 25 наклон вперед 50 пенап назад 75 осталось 90 вперед 65 справа 90 вперед 20 пендаун квадрат 15 пенап вперед 45 пендаун квадрат 15 пенап назад 15 справа 90 вперед 20 осталось 45 квадрат 20 конец 

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

»Вот еще одна демонстрация той же точки. Очистить экран и введите эту инструкцию:

 повтор 20 [квадрат с маятником вниз 12 пер вверх вперед 20 вправо 18] 

Вы увидите квадраты, нарисованные в нескольких разных направлениях. Это не будет однострочной программой, если вы попытаетесь сделать это с помощью Картезианская метафора!

Состояние Черепахи

С точки зрения черепахи, начертить прямой квадрат — это так же, как рисование алмаза. Это только с глобальной точки зрения, с учетом границ экрана, что есть разница.

С глобальной точки зрения, как мы можем думать об этом разница? Как мы описываем, что делает одну и ту же процедуру иногда рисуют одно (вертикальный квадрат), иногда другое (прямой квадрат). алмаз)? Ответ, в самых общих чертах, заключается в том, что результат команды квадратных зависит от прошлой истории черепаха - она ​​извивается и поворачивается, прежде чем добраться до того места, где она может быть в настоящее время. То есть у черепахи есть своего рода память о прошлых событиях.

Но на самом деле важна не вся предыстория черепахи. Все, что имеет значение, это текущий 9 черепахи.0013 позиция и ее текущий рубрика, как бы туда не попал. Эти две вещи, положение и направление называются состоянием черепахи . Это немного похоже на попытку собрать кубик Рубика; ты, возможно, повернулся часть куба уже 100 раз, но все, что имеет значение сейчас, это текущий образец цветов, а не то, как вы туда попали.

Я уже упоминал команду setpos , которая устанавливает позиция. Так же есть команда с заголовком (сокращенно seth ), чтобы установить заголовок. Заголовок настройки принимает один ввод, число. Эффект состоит в том, чтобы превратить черепаху так, чтобы она была обращена к курсу компаса, указанному номер. Ноль представляет Север; курс измеряется в градусах по часовой стрелке с севера. (Например, Восток — 90, Запад — 270. ) направление по компасу отличается от используемой системы измерения угла в аналитической геометрии, в которой углы измеряются против часовой стрелки с востока, а не по часовой стрелке с севера.

В дополнение к командам, устанавливающим состояние черепашки, Logo предоставляет операции по выяснению состояния. pos pos это операция без входов. Его вывод представляет собой список из двух чисел, представляющих Текущее положение черепахи. товарная позиция . Товарная позиция также является работа без входов. Его выход представляет собой число, представляющее черепаху. текущий заголовок.

Помните, что при использовании этих команд состояния и операций вы мышление в глобальном (картезианском) стиле, а не локальном (черепаха) стиль. Глобальное состояние иногда важно, как и глобальные переменные. бывают иногда полезны. Если вы хотите нарисовать картинку, содержащую три виджеты, вы можете использовать setpos , чтобы поставить черепаху на место для каждого виджета. Но процедура виджета , которая рисует каждый виджет, вероятно, не следует использовать setpos . (Вы также можете использовать setpos экстенсивно в ситуации, когда декартово метафора, как правило, более уместна, чем метафора черепахи, например график математической функции.) Как и в случае глобального переменные, вы, скорее всего, будете злоупотреблять глобальным графическим стилем, если вы привыкли к ОСНОВНОЙ компьютерной графике. Хорошее правило thumb, если вы делаете что-то черепашье, а не рисуете график функции, что вы не должны использовать setpos с опущенной ручкой.

»Понимаете почему?

Симметрия

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

 закорючка вперед 100 правильно 135 вперед 40 справа 120 вперед 60 справа 15 конец 

Это не очень красивая картинка. Но кое-что интересное происходит, когда вы продолжаете повторять волнистые линии:

 повторить 20 [загогулина] 

Вместо того, чтобы заполнять экран хэшем, черепашка рисует симметричная форма и повторяет один и тот же путь снова и снова! Давайте попробуйте другой пример:

 в сквогглинг вперед 50 справа 150 вперед 60 правильно 100 вперед 30 справа 90 конец 

Загогулина при повторении превращается в причудливый квадрат; квадратик превращается в 18-конечную вертушку. Все ли возможное закорючка таким образом создает повторяющийся узор? Да. Иногда вы приходится повторять процедуру много раз, но по сути любую комбинация команд вперед и вправо в конечном итоге откатится его шаги. (Есть одно исключение, о котором мы вскоре поговорим.)

Чтобы понять, почему повторение приводит к порядку из хаоса, мы должны подумать о более простой графической процедуре логотипа, которая, вероятно, очень вам знакомо:

 в поли :размер :угол вперед: размер прямой угол поли: размер: угол конец 

Поскольку это рекурсивная процедура без правила остановки, это будет продолжаться вечно. Вам придется остановить его, нажав кнопку Клавиша BREAK, или команда-точка, или что-то еще на вашем конкретном компьютере требует. Процедура рисует правильные многоугольники; вот некоторые примеры, чтобы попробовать:

 поли 100 90 поли 80 60 поли 100 144 

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

»Какой угол вы бы выбрали, чтобы нарисовать треугольник? Пятиугольник? Как ты знать?

Весь фокус в том, чтобы думать о состоянии черепахи. Когда вы закончите рисуя многоугольник, черепашка должна вернуться в исходное положение и его первоначальный заголовок , чтобы быть готовым восстановить тот же путь. Чтобы вернуться к исходному курсу, черепаха должна повернуться через полный круг, 360 градусов. Чтобы нарисовать квадрат, для Например, черепаха должна повернуться на 360 градусов за четыре оборота, поэтому каждый поворот должен быть 360/4 или 90 градусов. Чтобы нарисовать треугольник, каждый поворот должен быть 360/3 или 120 градусов.

»Теперь объясните, почему угол ввод 144 рисует звезду!

Итак, вернемся к нашим закорючкам. Ранее я сказал, что единственное, что мы должны помнить из прошлой истории черепахи изменение в ее государство. Неважно, как произошло это изменение. Когда вы рисуете закорючка , черепаха проходит определенное расстояние и поворачивается через определенный угол. Тот факт, что это заняло обходной путь не имеет значения. Как это бывает, загогулины получается прямо через 135+120+15 градусов, всего 270. Это эквивалентно повороту налево на 90 градусов. Вот почему повторяя закорючка рисует что-то в форме квадрата.

» А как насчет скэггл ? При повторении рисуется фигура с 18-кратной симметрии, то его общий поворот должен быть 360/18 или 20 градусов. Является Это?

»Вот еще одна причудливая форма. Посмотрим, сможете ли вы предсказать, какой симметрии он покажет до , вы фактически повторите его на компьютер.

, чтобы загуглить вперед 50 справа 70 вперед 10 справа 160 вперед 35 справа 58 конец 

Предположим, вам нравится форма волнистой линии , но вы хотите нарисовать законченная картина, которая выглядит треугольной (3-кратная симметрия) вместо квадрат (в 4 раза). Можешь так сделать? Конечно; вы можете просто изменить последняя инструкция из закорючка процедура, чтобы сумма поворот на 120 градусов вместо 90. (Давай, попробуй. Будь осторожен про лево и право.)

Но это довольно уродливый процесс - редактировать загогулину в чтобы изменить не то, как выглядит закорючка, а то, как она вписаться в большую картину. С одной стороны, это нарушает идею модульность. Закорючка должна просто рисовать загогулину, и там должна быть другая процедура, что-то вроде поли , который объединяет закорючки в симметричный узор. Для другого, люди не должны заниматься арифметикой; компьютеры должны делать арифметика!

Чтобы очистить наш акт, я собираюсь начать с написания процедуры, которая может нарисовать произвольную загогулину, но без изменения черепашки заголовок. Он называется Protect.heading , потому что он защищает против изменения с помощью процедуры волнистой линии.

 для защиты.heading :squig местный "старожил" сделать "старый заголовок" беги : сквиг установка: старый заголовок конец 

Эта процедура демонстрирует использование заголовка и с заголовком . Мы помним начальный заголовок черепахи в локальной переменной старый заголовок . Затем мы выполняем любую закорючку процедура, которую вы указываете в качестве входных данных для protect.heading . ( команда запуска принимает список инструкций логотипа в качестве входных данных и оценивает это.) Вот как вы можете его использовать:

 protect. heading [волнистая линия] Protect.heading [квадратура] 

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

Теперь мы можем использовать protect.heading для записи декорированного- поли процедура, которая позволит нам указать тип симметрии, который нам нужен:

 вращать :повороты :команда повторить :повороты [защита.заголовок :команда вправо 360/:повороты] конец 

»Попробуйте прокрутить с такими инструкциями:

 спин 3 [волнистая линия] спин 5 [волнистая линия] спин 4 [квадрат] спин 6 [загогулина] вращение 6 [fd 40 squiggle] спин 5 [pu fd 50 pd квадратик] 

Разве не лучше?

Я упомянул, что есть исключение из правила: каждая закорючка в конечном итоге повторит свои шаги, если вы повторите его. Вот:

 в белку вперед 40 справа 90 вперед 10 справа 90 вперед 15 справа 90 вперед 20 справа 90 конец 

»Попробуйте повторить белка 20 раз. Вы обнаружите, что вместо того, чтобы вернуться в исходное положение и взять курс, черепаха уходит прямо вдаль. Почему? ( Загогулина была четырехкратная симметрия, потому что его полный поворот составлял 90 градусов. Что общая токарка белка ?) конечно если использовать белка во втором вводе поверните , он будет работать как другие, потому что 9В этом случае 0052 спин управляет направлением движения черепахи.

Я использовал случайные закорючки с глупыми именами, чтобы сделать дело в том, что, обращая внимание на симметрию, Logo может сделать шелковый кошелек из свиного уха. Но, конечно, нет причин не применить спин к более тщательно разработанным деталям. Вот один я нравиться:

 в пальцы: размер вперед 10 вниз правильно 5 повторить 5 [вперед: размер вправо 170 вперед: размер влево 170] осталось 5 Пенап назад 10 Пендаун конец вращение 4 [пальцы 50] вращение 10 [пальцы 30] 

Фракталы

Я хочу написать процедуру для рисования этого изображения дерева:

Хитрость заключается в том, чтобы идентифицировать это как рекурсивную проблему. Делать вы видите меньшие, но похожие подзадачи? Дерево состоит из ствол с двумя прикрепленными деревьями меньшего размера.

Таким образом, решение в первом приближении может выглядеть так:

 в дерево: размер вперед: размер осталось 20 дерево: размер/2 справа 40 дерево: размер/2 конец 

Если вы попытаетесь запустить эту процедуру, вы увидите, что мы по-прежнему есть работа. Но напомню, что недостроенный такая процедура не является ошибкой ; ты не должен этого чувствовать вам нужно проработать каждую деталь, прежде чем вы впервые коснетесь клавиатура. Первая очевидная проблема заключается в том, что нет правила остановки, поэтому процедура продолжает пытаться рисовать все меньшие и меньшие поддеревья. Какие должно быть предельное условие? В этом случае нет очевидного конец, как butfirst слова становятся пустыми.

Есть два подхода к ограничению количества ветви дерева. Один из подходов состоял бы в том, чтобы явно выбрать, как deep мы хотим получить рекурсивные вызовы. Мы могли бы сделать это, добавив еще один вход, называемый depth , это будет количество уровни рекурсии, позволяющие:

 в дерево :глубина :размер если :depth=0 [стоп] вперед: размер осталось 20 дерево (:глубина-1) :размер/2 справа 40 дерево (:глубина-1) :размер/2 конец 

Другим подходом было бы продолжать позволять ветвям получать меньше, пока они не упадут ниже разумного минимума:

 в дерево: размер если :size<4 [стоп] вперед: размер осталось 20 дерево: размер/2 справа 40 дерево: размер/2 конец 

Любой подход является разумным. я выберу второе просто потому, что это кажется немного проще. Стоимость такого выбора несколько меньший контроль над итоговой картинкой; Я не уверен, что это будет иметь именно то количество ветвей, которое я изначально планировал.

Модифицированная процедура теперь останавливается, но все еще не нарисовать дерево, которое я имел в виду. Проблема в том, что эта версия дерево не является инвариантом состояния: оно не оставляет черепаху с та же позиция и заголовок, что и изначально. Это важно, потому что когда дерево говорит

 дерево: размер/2 справа 40 дерево: размер/2 

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

 в дерево :размер если :size<4 [стоп] вперед: размер осталось 20 дерево: размер/2 справа 40 дерево: размер/2 осталось 20 назад: размер конец 

Вуаля! Если вы попробуете tree 50 , вы увидите что-то вроде картина, которую я имел в виду.

Вы, наверное, думаете, что это "дерево" не очень похоже на дерево. В нем есть несколько недостатков: он слишком симметричен; это не иметь достаточно веток; ветки также должны частично расти вверх по стволу как наверху. Но все эти проблемы можно решить, добавив еще несколько шаги к процедуре:

 в дерево: размер if :size < 5 [вперед :size назад :size stop] вперед: размер/3 слева 30 дерево :размер*2/3 справа 30 вперед: размер/6 справа 25 дерево: размер/2 слева 25 вперед: размер/3 справа 25 дерево: размер/2 слева 25 вперед: размер/6 назад: размер конец 

Мы можем украсить елку, как захотим. Единственный требование состоит в том, чтобы процедура была инвариантна к состоянию: позиция и заголовок должны быть такими же, как его начальная позиция и заголовок.

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

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

»Если вам нужен еще один сложный фрактальный проект, попробуйте написать программу для создания этих фрактальных снежинок:

Дополнительное чтение

Если вы заинтересованы в интеллектуально тщательном исследовании геометрия черепахи, продолжая линии, которые я начал здесь, читать Геометрия черепахи , Абельсон и ди Сесса (MIT Press, 1981). От них я узнал многое из того, что описано в этой главе.


Learn more

Только новые статьи

Введите свой e-mail

Видео-курс

Blender для новичков

Ваше имя:Ваш E-Mail: