Начало: 3 марта 2000 года
Конец: 21 марта 2000 года
Вы должны реализовать метод рисования Импрессионист (impressionistic
paint system), похожий на The
Impressionist Пауля Хеберли (Paul Haeberli) (эта программа реализована
как Java апплет). Чтобы лучше понять, что от Вас требуется, просто "поиграйте"
с программой Хеберли (Haeberli).
Ваша версия программы Импрессионист должна загружать цветную картинку,
давать возможность пользователю рисовать картинку и потом сохранять ее.
Пользователь рисует картинку, которая в отличие от первоначальной, будет
создаваться набором ударов кисти. Каждый удар имеет цвет, форму, позицию,
размер и ориентацию. Удары создаются пользователем с помощью скольжений
"нажатой" мышки по изображению. Цвет кисти выбирается исходя из соответствующей
части первоначального изображения и позиции курсора во время удара.
Основная часть задания.
Вам предлагается реализовать:
-
три формы кисти:
-
круг;
-
прямоугольник, повернутый на 45 градусов. Например:
-
скопление разбросанных линий. Например:
-
управление пользователем размером кисти;
-
три способа контроля позиции и ориентации кисти:
-
самый простой - это размещение кисти в текущем положении курсора с фиксированной
ориентацией;
-
ориентация кисти в зависимости от направления движения мышки. Например,
если кисть имеет форму прямоугольника, то его длинная сторона направлена
в сторону направления движения курсора;
-
непрерывное "нервное подергивание" (случайное возмущение) позиции и ориентации
ударов кисти относительно местоположения курсора.
-
переход одного цвета в другой (blending mode). Это значит можно управлять
значением opacity ("неясности") в пределах от 0 до 1. Opacity контролирует
прозрачность ударов кисти. Если удар неясен (opacity = 1), то удар перепишет
текущие нарисованные цвета. Если удар прозрачен (0 <= opacity < 1),
то он "смешается" с исходной картинкой. В итоге цвет удара получается исходя
из следующей формулы: I = I1(a) + I2(1-a), где I - итоговый цвет удара;
I1 - цвет удара; I2 - цвет исходной картинки в области удара; a - значение
opacity.
Пример с круглой кистью:
Исходная картинка |
Удар кистью с opacity=1 |
Удар кистью с opacity=0.7 |
Удар кистью с opacity=0 |
За реализацию выше перечисленных основных пунктов ставится максимум 10
баллов. 70% Вашей оценки будет зависеть от того, какие пункты Вы реализовали.
Это значит, что Вы будете терять баллы за каждый нереализованный пункт.
Обязательны
реализация одной формы кисти, одного способа контроля позиции и ориентации,
управление размером кисти. В противном случае задание будет считаться невыполненным.
20% Вашей оценки будет зависеть от удобства использования программы, т.е.
Ваша программа должна имеет "разумный" интерфейс (графическое меню и управление
с помощью клавиатуры должно быть удобным). И последние 10% оценки зависят
от стиля программирования; в частности, мы можем снижать баллы за "сбивающий
с толку" код.
Дополнительные баллы.
Дополнительно можно получить до 5 баллов за реализацию нововведений
или за необыкновенные расширения основных пунктов. Для получения дополнительных
баллов пишите в разделе описания, что Вы придумали и почему Вы думаете,
что это интересно. Только за действительно оригинальные идеи будут предоставляться
дополнительные баллы.
Есть несколько предложений:
-
добавьте новые формы кисти, существенно отличающиеся от тех, которые требуются.
Объясните, что отличает Ваши кисти и какие дополнительные возможности (эффекты)
они дают.
-
много времени отнимает раскрашивание вручную. Добавьте возможность создания
картинки автоматически. Опишите Ваш алгоритм выбора атрибутов кисти в этом
автоматическом закрашивании.
-
одно из неудобств, связанное с методом рисования Импрессионист, состоит
в том, что Вы не видите, какую часть исходной фотографии Вы закрашиваете.
Показывайте "легкую" (dimmed) версию исходного изображения во время рисования.
Добавьте способ управления показывать/не показывать "легкое" изображение
на экране.
-
направление удара кисти может зависить от от направления яркости или контуров
в соответствующей области исходной картинки. Добавьте способ управления
зависит/не зависит.
Обратите внимание, что некоторые из этих предложений намного труднее реализовать,
чем другие. Это будет учитываться при оценке дополнительных баллов.
Форма сдачи задания.
Необходимо сдать:
-
выполняемый файл и все необходмое для его запуска (*.dll, ...) (можно реализовать
программу под Windows или под FreeBSD на любом языке, кроме Java);
-
исходный(е) файл(ы). В начале каждого напишите Фамилию Имя Отчество и номер
группы;
-
файл readme.txt. Шаблон этого файла можно найти здесь;
Дополнительно можно сдать:
-
картинки, демонстрирующие работу Вашей программы;
Все выше перечисленные файлы сдавайте на подписанных дискетках, которые
не содержат ничего лишнего, в 77 аудиторию либо шлите по адресу.
Можно архивировать zip-ом или tar-ом.
Ниже приведены ссылки, где можно найти дополнительную
информацию и посмотреть примеры картинок:
-
The
Impressionist (Java applet) (English).
-
Программа и
примеры картинок, которые можно получить с ее помощью (English).
-
О
программе и методе Пауля Хеберли (Paul Haeberli), создателя Java апплета
(English).
|