Задание 1. Системы частиц.
Начало: 10 марта 2006 года
Конец: 24 марта 2006 года
Авторы задания:
Анна Дегтярева (adegtiareva @ graphics.cs.msu.ru)
Алла Масленникова (prozerpina @ newmail.ru)
Познакомиться со средой программирования Windows. Реализовать визуализацию системы частиц.
Общая теория
Система частиц представляет собой дискретное N-мерное поле, в клетках которого могут быть расположены частицы. Мы будем рассматривать двухмерный случай. Время в такой системе также дискретно. За один такт времени каждая из частиц может переместиться под влиянием других частиц или внешней среды (т.е. каких-то сил, определенных не для каждой частицы отдельно, а для всей системы в целом - например, силы гравитации). Поведение системы задается правилами поведения частиц в данной системе.
Количество частиц в системе может быть постоянным либо меняться со временем. Если количество частиц может меняться, то могут появляться (зарождаться) новые частицы или исчезать (умирать) старые.
Каждая частица системы обладает набором свойств. Свойствами частицы могут быть, например, цвет, время жизни, возраст, размер, скорость и направление движения и т.д. Эти свойства могут меняться в течение жизни частицы, но сам набор (состав) свойств частицы остается неизменным. Т.е. частица, обладающая размером, не может потерять размер при жизни. Таким образом, набор свойств определяет тип частицы. При зарождении частицы ее свойства инициализируются начальными значениями.
В одной и той же системе могут быть частицы как одного типа (например, в системе "Пламя" все частицы могут быть искрами), так и нескольких (например, в системе "Тушение пламени" могут быть и частицы-искры, и частицы-капли воды).
Системы частиц используются для моделирования различных явлений природы, особенно эффективно системы частиц используются при моделировании объектов нечеткой формы - воды, огня, дыма, меха, деревьев. С помощью систем частиц составляются модели поведения групп живых существ - стай птиц, косяков рыб. В этом задании предлагается смоделировать какое-нибудь природное явление из приведенных ниже.
Во всех нижеприведенных примерах частицы обладают следующими свойствами: цвет, размер, время жизни (количество тактов от рождения, по достижении которого частица умирает), возраст (сколько тактов прошло с момента рождения) и дополнительный набор, зависящий уже от каждого конкретного примера.
Огонь
Атрибуты частицы-искры:
Цвет, размер, длина оставляемого следа, коэффициент угасания, скорость движения (величина, на которую частица смещается по осям Х,Y за один такт).

Инициализация примера на рисунке:
- цвет для всех частиц одинаковый: R = 255, G = B = 0.
- координаты: y одинаковый у всех частиц, х выбирается случайным образом для каждой частицы.
- размер от 2 до 10, выбираются случайным образом.
- время жизни от 0 до 120 тактов.
- длина следа от 0 до 30.
- коэффициент угасания от 1 до 10.
- скорость по х = 0, по у = 1.
- сила ветра 2.
Максимальное количество частиц: 400.
Правила поведения частиц на каждом такте:
- х меняется на "скорость по х" плюс-минус "сила ветра", у меняется на "скорость по у".
Искры рождаются на дне системы (т.е. y-координата новой частицы фиксирована, x-координата выбирается случайным образом). После рождения частица на каждом такте поднимается наверх под действием выталкивающей силы, одновременно сдвигаясь влево или вправо под действием движений воздуха (направление вычисляется случайным образом), и со временем угасая.
Угасание проявляется в виде изменения цвета и размера искры: каждый такт времени цвет меняется на величину, задаваемую коэффициентом угасания. От каждой частицы остается след, пропадающий через несколько тактов времени (количество тиков за которое след угасает, задается свойством "длина оставляемого следа"). Время жизни каждой частицы выбирается случайным образом в некоторых заданных пределах: искорка может истлеть раньше или позже.
В первый такт рождается одна частица и каждый следующий такт рождается еще одна до тех пор пока их количество не станет больше некоторой пороговой величины. Когда какая-либо частица умирает, рождается новая частица. Таким образом система оказывается зацикленной.
Водопад
Атрибуты частицы:
Цвет, размер капель, скорость, след (необязательный атрибут, т.к. след может и не оставаться).
В момент зарождения атрибуты задаются случайным образом.

Инициализация примера на рисунке:
- цвет для каждой частицы выбирается случайным образом: B = random * 255, R = G = B / 4.
- координаты (0, 0).
- размер от 1 до 10.
- время жизни от 0 до 360.
- длина следа 2.
- постоянная гравитация, присутствующая в системе 3.
- сила всплеска 0.
- скорость по х = 1, по у = 6.
- колебание капель воды = 2.
Максимальное количество частиц: 400
Правила поведения частиц на каждом такте:
- каждый такт времени х увеличивается на "скорость по х" плюс-минус величина колебания капель воды, шаг по у на "скорость по у" плюс-минус величина колебания капель воды.
- каждый такт времени скорость по у увеличивается на величину от 0 до 4 гравитаций плюс сила всплеска (изначально сила всплеска равно нулю).
- если координата у достигла 0, сила всплеска меняется в 25% случаев - при этом она становится равной от 0 до -4 гравитаций, иначе скорость по у становится равной 0; если сила всплеска уже отлична от нуля, то она уменьшается на 2.
Из левого верхнего угла системы под напором течет вода (частицы - капли воды): x- и y-координаты каждой новой частицы фиксированы. Под действием силы тяжести и силы напора воды капли падают вниз по параболе. Упав вниз (достигнув фиксированной y-коориднаты), капля может отскочить от дна, образуя брызг, либо уплыть по дну вправо или влево. Количество и амплитуда брызг зависит от скорости, с которой капля упала или, в более простом случае, выбирается случайным образом.
В первый такт времени рождаются сразу все частицы системы. Когда частица умирает, рождается новая частица. Эта система эмулирует фонтан: количество воды в системе ограничено и циркулирует по замкнутому кругу. Время жизни капли выбирается случайно в некоторых заданных пределах - это время, за которое эта капля воды в фонтане совершит полный цикл.
Снег
Атрибуты частицы:
Цвет, размер, скорость.
В момент зарождения атрибуты задаются случайным образом.

Инициализация примера на рисунке:
- цвет для каждой частицы считается так: синяя компонента random * 128 + 128, красная и зеленая компоненты равны половине от синей компоненты
- координаты (random * m_width, 0)
- скорость по х и по у равна 1
- размер от 1 до 10
- время жизни от 0 до 800
Максимальное количество частиц: 200
Правила поведения частиц на каждом такте:
- каждый тик времени х увеличивается на от -2 до 2 "скоростей по х", у увеличивается на "скорость по у"
- если координата у достигла 0, скорость по у становится равной 0
Частицы-снежинки рождаются на верхней границе системы (y-координата новой частицы фиксирована, x-координата выбирается случайным образом) и падают вниз, одновременно сдвигаясь вправо или влево под движением ветра (направление выбирается также случайным образом). Атрибуты могут быть фиксированными все время жизни частицы, а могут изменяться при падении - например, во время падения частица не оставляет следа, а, упав на дно, "тает", меняя цвет и размер. Время жизни снежинки выбирается случайно в некоторых заданных пределах - это то самое время, за которое снежинка растает. Снежинка может "растаять", не долетев до дна.
В первый такт времени рождается одна частица и каждый следующий такт рождается еще одна до тех пор пока их количество не станет больше некоторого порога. Когда частица умирает, рождается новая частица. Таким образом система оказывается зацикленной.
Спецэффект
Это не явление природы, но тоже красиво.
Атрибуты частицы:
Цвет, размер, скорость
При зарождении все частицы могут иметь одинаковые атрибуты.

Инициализация примера на рисунке:
- цвет для каждой частицы одинаковый, равен черному
- координаты - в виде слова "HI!"
- время жизни от 0 до 500
- размер 1
- скорость по х и скорость по у равны 0
Максимальное количество частиц: 400
Правила поведения частиц на каждом такте:
- каждый тик времени у увеличивается на скорость по у, х - на скорость по х
- если возраст больше трех четвертей времени жизни, скорость по у становится равна 1
В первый тик времени все частицы одновременно рождаются в некоторой фиксированной позиции относительно друг друга. Они могут образовывать геометрическую фигуру, например круг, или букву или какой-нибудь символ. Некоторое время частица никуда не двигается, потом начинает падать вниз с постоянной или нарастающей скоростью. До конца времени жизни частица лежит на дне системы. Как только все частицы умрут, заново рождается такое же количество частиц в начальной конфигурации и цикл повторяется. Время жизни каждой частицы выбирается случайно чтобы создавалось ощущение что символ "осыпается" равномерно.
Программа должна выводить на экран монохромное или цветное изображение состояния одной из предложенных систем частиц.
Необходимо, чтобы поле вывода было достаточно велико, как минимум 200х200 пикселов. Программа должна показывать эволюцию системы.
Это можно делать разными способами: либо по задаваемому пользователем номеру итерации рассчитывать нужное состояние,
либо по нажатию кнопки производить расчет каждой следующей итерации, либо сделать анимацию - последовательно выводить итерации одну за другой.
| Реализация одной из вышеописанных систем частиц (требуемый минимум) |
6 баллов |
| Реализация нескольких систем частиц. |
+1 балл |
| Частицы размером более 1 пиксела изображать в виде кружочков. |
+1 балла |
| Плавная анимация: изменения состояния системы происходят без вмешательства пользователя (исключение - кнопка СТАРТ/СТОП для запуска/остановки системы). |
+1 балл |
| В системах "снег" и "спецэффект" можно организовывать кучки на дне системы. Т.е. при падении частица анализирует, не лежит ли на том месте, которое она хочет занять, уже какая-нибудь другая частица и если да, то занимает не это место, а ложится сверху. |
+1 балл |
| Интерактивность (*) - там где пользователь ткнул мышкой, появляется новая частица, ее поведение полностью аналогично остальным частицам. Взаимодействие с помощью указания координат (т.е. без участия мышки) баллами не поощряется. |
+1 балл |
Реализация скринсейвера с какой-нибудь системой частиц (учтите: если вы реализуете ТОЛЬКО скринсейвер, то требуемый минимум и, следовательно, все задание, считается невыполненным).
О том как делать скринсейверы подробно написано вот тут: http://www.wischik.com/scr/.
|
+1 балл |
| Красивый интерфейс (*) |
+1, +2 балла |
* Под интерактивным изменением понимается возможность во время эволюции системы или
при задании начальной конфигурации менять состояние системы. Например, по клику мыши в какой-либо точке поля появляется новый тьюрмит (для тьюрмитов).
* Красивый интерфейс в данном и последующих заданиях оценивается субъективно проверяющим, аппелировать его не имеет смысла. В "красота" входит аккуратность выполнения задания (кнопки и надписи выровнены), возможность изменить размеры формы, отсутствие мерцания при перерисовке и т.д. Не путайте красивый интерфейс с вычурным - если вы реализовали интерфейс, например, с окном круглой формы и сделали поддержку шрифтов с вензелями, но не выровняли кнопки - вряд ли такой интерфейс можно будет назвать красивым.
Оформление не отличается от обычного.
ZIP-архив с исходными текстами и исполняемыми файлами, названный
по схеме aZV_nnnnnnnn.zip (где Z - номер задания, V - номер версии задания, nnnnnnnn
- номер студенческого билета, a - буква "a" (латинским шрифтом)) присылайте на assign1@graphics.cs.msu.su
Например, студент с номером студенческого билета 06529042, сдающий обновленную (вторую) версию программы по первому заданию, должен прислать архив с именем a12_06529042.zip.
Также смотрите здесь, какие
файлы нам присылать и как их оформить Советуем очень внимательно
прочитать весь FAQ
Не забудьте положить в архив файл readme.txt. В файле описать интерфейс програмы (алгоритм
работы с программой, пункты меню, управляющие клавиши) и указать следующие
подзадания:
Реализация систем(ы) частиц: [указать реализованную систему(ы)]
Частицы размером более 1 пиксела изображены в виде кружочков: [+/-]
Реализация нескольких систем частиц: [+/-]
Плавная анимация: [+/-]
В системах "снег" и "спецэффект" кучки на дне системы: [+/-]
Возможность интерактивного изменения состояния: [+/-]
Реализация скринсейвера: [+/-]
Работа с программой: [алгоритм работы с программой]
Результаты смотрите в интернете и/или на стенде около комнаты 703
Все вопросы и комментарии присылать авторам
и проверяющим или задавать в форуме. Ответы на наиболее часто
задаваемые вопросы будут отражены в разделе ЧаВо по заданию
Примечания
- Задание выполняется строго индивидуально. За совместную работу
или обмен кусками кода ставится ноль баллов всем участникам,
если факт командной работы не был указан в readme.txt заданий.
- Рекомендуется написание программы под семейство ОС Windows.
Написание под другие операционные системы нежелательно и может
вызвать задержки с проверкой таких работ.
- Оценки будут размещены в разделе "Оценки" и вывешены около ауд. 703.
Я не умею программировать под ОС Windows, а в задании сказано, что писать нужно под эту операционную систему. Что делать?
Учиться, тем более что к курсу прилагаются материалы по
программироваю под Win32 для начинающих. Также в магазинах очень много книг, а интернете - много информации, а учиться не
составляет большой проблемы. Но не откладывайте это на потом. Первые задания достаточно легкие и предполагают изучение. В
дальнейшем у вас может просто не хватить времени. В библиотеке курса вы можете найти подробное
пособие по программированию под ОС Windows - вот прямая ссылка. К пособию прилагаются примеры
кода простейших программ, написанных в средах Visual C++ 6.0, Delphi 5 и CBuilder 5.
|