Как сделать циклический рисунок

Добавил пользователь Алексей Ф.
Обновлено: 19.09.2024

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

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

Цикл — это многократное исполнение последовательности команд.

Правила использования оператора цикла

  1. Цикл повтори используется тогда, когда число повторений цикла заранее известно или может быть вычислено.
  2. Оператор цикла начинается заголовком цикла - ключевым словом повтори, за которым в скобках указывается нужное количество повторений цикла.
  3. Тело цикла начинается открывающей фигурной скобкой < и заканчивается закрывающей >.
  4. В цикле выполняются все операторы, заключенные в скобки.

Для нашей задачи программа с использованием оператора цикла выглядит так:

Квадрат

покажись;
опусти_перо;

повтори ( 4 ) /* заголовок цикла */
/* начало цикла */
вперед ( 40 );
вправо ( 90 );
> /* конец цикла */

Вложенные циклы

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


Здесь явно напрашивается использование циклов, поскольку мы видим одинаковые элементы в рисунке и можно сказать исполнителю что-то вроде "Сделай 5 раз следующую операцию: нарисуй квадрат и переместись к левому нижнему углу следующего". С другой стороны, сам квадрат рисуется с помощью цикла. Поэтому один цикл повтори будет расположен внутри другого. Вложенный цикл — это цикл, расположенный внутри другого цикла

Решение задачи выглядит так:

ПятьКвадратов покажись; повтори ( 5 ) /* заголовок цикла */
/* начало цикла */
опусти_перо; повтори ( 4 ) /* заголовок вложенного цикла */
/* начало вложенного цикла */
вперед ( 40 ); вправо ( 90 ); > /* конец вложенного цикла */ вправо ( 90 ); подними_перо; вперед ( 50 ); влево ( 90 ); > /* конец цикла */ >

Вложенный цикл рисует квадрат, после Черепашка переходит в точку для рисования следующего квадрата. Это повторяется 5 раз.

Использован материал из книги "Алгоритмы и исполнители", автор Поляков К.

shema

Рис. 1. Принцип работы варио изображения (красным цветом обозначен первый кадр, бирюзовым — второй).

Рассмотрим создание анимированного изображения из серии кадров (Рис. 2).

Laura

Рис. 2. Набор кадров, любезно предоставлен Guillaume d’Hubert — 3dgh.fr

На компьютере движение выглядит замечательно (Рис.3).

Рис. 3 — Последовательность кадров, объединена в одно gif-изображение.

Изготовим лентикулярное изображение на основе этих кадров.
Возьмем линзовый растр 50 lpi c широким углом обзора — специально для анимации.
Для печати используем принтер Canon с разрешением 600 PPI (пикселов на дюйм, не путать с точками на дюйм).
Теоретически в него можно было бы закодировать 12 кадров, чтобы каждый кадр получил хотя бы один полноценный пиксел (600/50=12).

Далее исследуем, что же происходит при печати.
Используем USB-камеру-микроскоп для того чтобы разглядеть в деталях, как выглядит напечатанное закодированное изображение на бумаге и оценить работу линзового растра.
Рассмотрим питч-тест 50LPI в микроскоп (Рис.4).

Микроскоп

Рис. 4. Используем цифровой USB-микроскоп, чтобы рассмотреть отпечаток.

При наблюдении кодовых полос питч-теста через растр под разными углами мы видим разные полосы кодированного изображения (Рис.5). Таким же образом работает линзовый растр при выделении разных кадров из закодированного изображения.

Рис. 5 При изменении угла наблюдения через линзу видны разные полоски кодового изображения.

Посмотрим теперь, что происходит при печати кодированных изображений с разным количеством исходных кадров — видео 1.

Видео 1. Исследование печати анимированного изображения с использованием растра 50 LPI и струйного принтера с разрешением 600 PPI.

Увеличенные фрагменты напечатанных на принтере кодированных изображений с разным количеством кадров показаны на Рис. 6. Видно, что при 12 исходных кадрах изображение хоть и присутствует, но кодовая полоска единственного кадра отпечатана слабо — при просмотре через линзу её изображение едва заметно. При 6 кадрах ситуация чуть получше, при 2-х кадрах — уже видно полноценную смену двух изображений.

Увеличенные фрагменты печати кодированного изображения при разном N кадров

Рис.6. Увеличенные фрагменты отпечатков закодированного изображения с разным числом кадров. Печать 600 PPI, принтер Canon, бумага фото глянцевая, кодирование 50 LPI.

Вывод такой, что разрешение печати (не только заявленное в характеристиках принтера, но и реальное — на бумаге) должно быть намного выше, чем LPI растра (количество линз на дюйм), для того, чтобы получить четкое разделение кадров. Это означает, что надо использовать растр с бо’льшим шагом.
Вот пример печати анимированного (морфинг — меняются контуры и цвет объекта) изображения на линзовом растре 20 LPI и принтере Mimaki с разрешением 720 PPI (видео 2).

Видео 2. Печать лентикулярного изображения с эффектом морфинга на растре 20 LPI, разрешение 720 PPI.

При создании этого морфинг изображения было использовано 15 отдельных кадров, сформированных в серию из 30 кадров (с 1 по 15 и с 15 до 1). Надо отметить также, высокую точность печати на этом принтере. Печать выполняется прямо по пластику и нет впитывания/растекания чернил в поры бумаги. В результате получили качественное изображение.

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

Для получения качественной анимации нужно выполнить условия:

  1. Шаг растра должен существенно (в 30-40 раз) превосходить разрешение печати.
  2. Желательно использовать растр с широким углом обзора (40 и более градусов), предназначенный для создания анимации (flip).
  3. В дизайне исходных изображений желательно избежать перемещения контрастных деталей, например, черного предмета на белом фоне.

Советы по дизайну

1. Количество кадров анимации надо подбирать с учетом требуемой плавности перемещения.
Можно воспользоваться формулой N=R/L
R — разрешение печати, L — LPI растра.
Однако, надо учитывать и сказанное выше, — принимать во внимание реальное качество печати.

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

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

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

Задачи лабораторной работы

  • знать назначение алгоритма и его определение;
  • знать формы представления алгоритма;
  • уметь работать с основными алгоритмическими конструкциями;
  • уметь представлять алгоритм в виде блок-схемы;
  • уметь приводить примеры алгоритмов и применять их для построения блок-схем;
  • уметь составлять и записывать алгоритм одним из способов.

Перечень обеспечивающих средств

Общие теоретические сведения

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

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

  • словесным (пример в начале раздела);
  • графическим (виде специальной блок-схемы);
  • с помощью специальных языков программирования.

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

  1. Линейный алгоритм – это такой алгоритм, в котором все операции выполняются последовательно одна за другой.
  2. Алгоритмы разветвленной структуры применяются, когда в зависимости от некоторого условия необходимо выполнить либо одно, либо другое действие.
  3. Алгоритмы циклической структуры .

Циклом называют повторение одних и тех же действий (шагов). Последовательность действий, которые повторяются в цикле, называют телом цикла .

Циклические алгоритмы подразделяют на алгоритмы с предусловием, постусловием и алгоритмы с конечным числом повторов. В алгоритмах с предусловием сначала выполняется проверка условия окончания цикла и затем, в зависимости от результата проверки, выполняется (или не выполняется) так называемое тело цикла.

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

кумир

Видео на тему: КуМир. Робот. Знакомство

Настройка среды Кумир для исполнителя Робот.

Запущенная программа Кумир выглядит так.

кумир

Первым делом мы должны раскоментировать первую строку нашей программы, убрав символ |

кумир

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

использовать Робот

алг

нач

кон

Но перед началом, нам необходимо задать стартовую обстановку Робота и познакомиться с простыми командами исполнителя Робот.

Стартовая обстановка Робота

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

Что такое стартовая обстановка?

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

Отличаются они только тем, что в стартовой обстановке 2 справа от Робота находится стена.

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

Как задать стартовую обстановку в Кумир?

Запустив среду Кумир в меню Инструменты выбираем пункт Редактировать стартовую обстановку Робота.

кумир

Откроется окно с синим фоном. Это и есть стартовая обстановка Робота. И мы ее можем изменить.

По-умолчанию, размер окна 10 на 15 клеток. Если нам необходимо изменить количество строк и столбцов, то щелкаем Обстановка -> Новая обстановка и задаем необходимые значения

кумир

  • чтобы переместить Робота в новую позицию, щелкаем по нему левой кнопкой мыши и не отпуская ее тащим Робота в нужное место.
  • чтобы добавить/удалить стену, щелкаем левой кнопкой мыши по границе клетки.
  • чтобы закрасить/очистить клетку, щелкаем по ней левой кнопкой мыши
  • чтобы добавить или убрать точку в клетку щелкаем по клетке, удерживая клавишу Ctrl

После того, как мы задали нужную стартовую обстановку, ее необходимо сохранить (Обстановка -> Сохранить или Обстановка -> Сохранить как). После этого закрываем окно Обстановка и в основном окне программы выбираем Робот -> Сменить стартовую обстановку

Как работать в программе Кумир

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

Как работать в программе Кумир

Если в окне с зеленым фоном (текущая обстановка Робота) вы увидите вашу обстановку, то можно переходить к написанию алгоритма, используя простые команды Робота.

Исполнитель Робот. Простые команды.

У нашего Робота тоже есть система команд. Сегодня мы рассмотрим простые команды Робота. Всего их 5:

вверх

влево

вправо

закрасить

Результат выполнения этих команд понятен из их названия:

вверх — переместить Робота на одну клетку вверх

вниз — переместить Робота на одну клетку вниз

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

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

закрасить — закрасить текущую клетку (клетку в которой находится Робот).

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

вверх — Escape, Up (стрелка вверх)

вниз — Escape, Down (стрелка вниз)

влево — Escape, Left (стрелка влево)

вправо — Escape, Right (стрелка вправо)

закрасить — Escape, Space (пробел)

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

Теперь мы готовы написать первый алгоритм для Робота. Предлагаю начать с простого — нарисуем квадрат со стороной 3 клетки. Поехали!

Запускаем Кумир, настраиваем его. Можно начинать писать программу? Конечно нет! Мы же не задали стартовую обстановку! Делаем это. Предлагаю использовать вот такую:

кумир

Вот теперь все готово. Начинаем писать программу. Пока она выглядит так

Как работать в программе Кумир

Как работать в программе Кумир

Предлагаю рисовать квадрат, двигаясь по часовой стрелке. Для начала закрасим текущую клетку, дав команду закрасить. Потом делаем шаг вправо и опять закрашиваем клетку. И еще раз шаг вправо и закрасить.

Как работать в программе Кумир

Попробуем запустить программу и посмотреть что же получилось. Для запуска нажимаем F9 или же кнопку на панели инструментов

Как работать в программе Кумир

В результате мы должны увидеть вот такую картину

Как работать в программе Кумир

Теперь мы будем двигаться вниз и закрашивать правую сторону квадрата:

Потом пойдем влево, закрашивая нижнюю границу квадрата

У нас осталась одна не закрашенная клетка. Закрасим ее

Все готово! В итоге наша программа выглядит так:

использовать Робот

алг Квадрат

нач

закрасить

вправо

закрасить

вправо

закрасить

вниз

закрасить

вниз

закрасить

влево

закрасить

влево

закрасить

вверх

закрасить

кон

А результат ее работы вот так

Как работать в программе Кумир

Итак, сегодня мы с вами написали программу, используя простые команды Робота. Рекомендую попрактиковаться самостоятельно — придумать себе задание и написать программу. Это могут быть самые различные фигуры, узоры, буквы. К примеру, попробуйте написать программу, рисующую букву П, Р, Ш, Щ, М. А если получится и захотите поделиться — комментируйте и прикрепляйте результат к комментарию.

Исполнитель Робот. Циклы.

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

То есть мы повторили команду сделай приседание 7 раз. А есть ли смысл писать 7 одинаковых команд? Может проще дать команду сделай 7 приседаний? Конечно проще и правильнее. Это и есть цикл. Вы можете сами вспомнить примеры циклов из жизни — их довольно много.

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

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

Виды циклов.

Цикл со счетчиком.

Цикл со счетчиком применяется когда заранее известно сколько повторений необходимо сделать. В примере выше с приседаниями именно такой случай.

Для того, чтобы написать цикл со счетчиком для исполнителя необходимо знать его синтаксис. А он такой:

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

Давайте рассмотрим это на примере.

Закрасим 7 клеток, как на рисунке. Рекомендую почитать про стартовую обстановку Робота и про его простые команды.

Как работать в программе Кумир

Изначально Робот находился в левой верхней клетке.

Давайте для начала решим задачу линейно. В этом случае мы будет закрашивать текущую клетку и перемещаться на 1 клетку вправо и программа будет выглядеть так:
использовать Робот
алг
нач

Как видим, команды закрасить и вправо повторяются 7 раз. Давайте теперь перепишем программу с использованием цикла. Кстати, чтобы вставить цикл в свою программу можно в меню Вставка выбрать пункт нц-раз-кц или нажать одну из комбинаций клавиш Esc, Р (русская буква Р) или Esc, H (латинская буква H). Причем клавиши надо нажимать последовательно — сначала Esc, отпустить ее и только потом Р или H.

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

использовать Робот

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

В качестве разминки и закрепления предлагаю самостоятельно написать программу для Робота, которая нарисует квадрат со стороной 7 клеток. Естественно, используя цикл. Жду решения в комментариях.

Цикл с условием

Вернемся к физкультуре и изменим задачу. Ведь кто-то может и не сделать 7 приседаний, а другой способен сделать 27. Можно ли учесть это при создании цикла? Конечно. Только теперь мы будем использовать не счетчик (количество повторений), а условие. К примеру, пока не устал, делай приседания. В этом случае человек будет делать не конкретное число приседаний, а приседать до тех пор, пока не устанет. И наш цикл на абстрактном языке примет такой вид:

пока не устал

Слова не устал в нашем случае — это условие. Когда оно истинно, цикл выполняется. Если же оно ложно (устал) тело цикла не будет выполнено. У исполнителя Робот есть несколько условий

сверху свободно

снизу свободно

слева свободно

справа свободно

сверху стена

снизу стена

слева стена

справа стена

Теперь давайте решим следующую задачу для Робота — нарисовать вертикальную линию от левой до правой границы поля использую цикл с условием. Изначально Робот находится в левом верхнем углу.

Давайте сначала сформулируем словесный алгоритм — т. е. опишем словами что нужно делать Роботу. Этот алгоритм будет звучать примерно так:

В результате Робот пробежит по всем клеткам вправо и будет их закрашивать до тех пор, пока справа не окажется стена.

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

использовать Робот

нц пока справа свободно

В результате выполнения этой программы мы увидим вот такую картину:

Как работать в программе Кумир

Как видим, не хватает только закрашенной первой клетки. Для этого перед циклом необходимо выполнить команду закрасить.

Как работать в программе Кумир

Для закрепления прошу написать программу, которая будет делать рамку вокруг рабочего поля Робота независимо от его размера. Конечно же с использованием циклов с условием. В итоге должно получиться так:

Читайте также: