Три техники программирования динамической графики.

Можно говорить о трех техниках создания программ с динамической графикой. Мы рассмотрим их на примере, который условно назовем "Полет орла".

Данный пример использует традиционную технику мультфильма - смену двух форм, - но в усложненном варианте. Будем считать, что орел делает короткий взмах крыльями (3 тика), примерно в два раза дольше летит с опущенными крыльями (7 тиков) и все время скользит со скоростью 2 точки за один тик (ВП 2 ЖДИ 1). Таким образом период, который затем точно повторяется, занимает 3+7=10 тиков.

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

 

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

Техника 1. "Ручное программирование".

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

это орел_ручной
нф 9
повтори 3 [вп 2 жди 1]
нф 10
повтори 7 [вп 2 жди 1]
орел_ручной
конец

 

Техника 2. "Параллельное программирование".

Эта техника связана с применением параллельных процессов - возможности, которая появилась в ЛогоМирах и отсутствует в системе LogoWriter. Суть параллельных процессов заключается в том, что блоки программы, записанные последовательно, могут выполняться одновременно. Разные параллельные процессы могут относиться как к разным черепашкам, так и к одной и той же черепашке. Параллельные процессы создаются с помощью команд ЗАПУСТИ и ВСЕГДА

В нашем примере можно выделить два относительно независимых процесса: смену форм и движение. Поскольку оба процесса должны быть бесконечными, в тексте программы они запускаются с помощью команды ВСЕГДА:

это орел_параллельный
всегда [нф 9 жди 3 нф 10 жди 7]
всегда [вп 2 жди 1]
конец

Согласитесь, что процедура стала заметно экономичней. Еще раз подчеркнем, что возможность параллельных процессов существует только в системе ЛогоМиры.

Техника 3. "Однотактовое программирование"

Напомним суть однотактового подхода: рекурсивная процедура описывает действия, которые происходят в "универсальную" единицу времени (1 тик). Поскольку очевидно, что в разные моменты времени могут происходить разные действия, универсальная процедура должна использовать условные команды ЕСЛИ и ЕСЛИИНАЧЕ для различения разных моментов времени. В нашем примере таких моментов три:

Более подробные объяснения к предлагаемому тексту программы смотрите в разделе "Периодичные условные действия ".

это орел_однотактовый :сч
вп 2 жди 1
если (остаток :сч 10) = 0 [нф 9]
если (остаток :сч 10) = 3 [нф 10]
орел_однотактовый :сч + 1
конец

Сравнение техник.

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

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

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

Вернуться к основной таблице