Задача Плоттер (FIT9201SURNAME_Plotter)
Срок выполнения
Рекомендуемая сдача: 23 марта
Крайний срок: 6 апреля
Предисловие
Задача на разработку и реализацию алгоритмов визуализации графиков функций, заданных различными способами. Одной из решаемых подзадач является визуализация произвольных лемнискат с двумя фокусами - овалов Кассини.
Условия
Элементы пользовательского интерфейса приложения
1. Окно поддерживает произвольные размеры - тянем курсором мыши за край окна
2. Окно имеет 4 вкладки с различными областями рисования, которые занимают большую часть окна и изменяются автоматически
3. Вкладка Bresenham - первый график, координаты целочисленные
4. Вкладка Parametrization - второй график, координаты целочисленные
5. Вкладка Difference - разность результатов визуализации двух методов (Bresenham и Parametrization) и время работы каждого алгоритма в милисекундах
6. Вкладка Curve - третий график
7. Элементы для отображения параметров графиков (обязательно координаты фокусов)
8. Изменение размеров окна изменяет размеры видимой области графиков Bresenham, Parametrization, Difference и сохраняет масштаб
9. Изменение размеров окна изменяет масштаб графика Curve
10. Толщина линий на графике Curve задается отдельным слайдером
11. Для указания вида лемнискаты используется слайдер (константы r) , рядом с которым отображается его значение
Логика приложения
Ваше приложение должно визуализировать графики функции алгоритмами, которые удовлетворяют условиям задания. Требуется визуализировать двумя разными способами графики овалов Кассини и график функции, заданной параметрически. Окно приложения должно поддерживать изменение размеров и отрабатывать их согласно указанным выше пунктам (пп. 8-9) . Каждый график располагается на отдельной вкладке окна. Одна дополнительная вкладка используется для отображения "разности" изображений результатов работы разных методов.
Опр. Овалом Кассини (лемнискатой с двумя фокусами) называется геометрическое место точек, такое, что произведение расстояний до двух заданных точек (фокусов) постоянно и равно квадрату некоторого числа. Уравнение для лемнискаты с двумя фокусами имеет следующий вид:
Пример (Лемниската Бернулли). Пусть заданы фокусы лемнискаты: (-1; 2), (2; -2). Тогда ее график выглядит следующим образом:
Первый график - произвольная лемниската с двумя фокусами, задаваемая параметрами: координатами двух фокусов и значением константы r.
На вкладке содержится слайдер для задания целочисленной константы r, а фокусы задаются мышкой. Рисование осей абсцисс и ординат обязательно.
Управление мышкой: зажали левую кнопку - поставили первый фокус; держим и меняем положение; место где отпустили - второй фокус. Обязательным является рисование точек фокусов (блок пикселей, например 3x3). Кроме этого, в момент выставления фокусов, рекомендуется рисовать линию между ними.
Для визуализации первого графика используется вариант алгоритма Брезенхема, разработанный самостоятельно. Любые расчеты при растеризации допустимо производить используя только целочисленную арифметику. Эмуляция вещественной арифметики (например, с фиксированной точкой) запрещена.
Второй график - произвольная лемниската с двумя фокусами, заданная параметрически. Необходимо визуализировать ее алгоритмом растеризации функций, заданных параметрически. Шаг параметра необходимо выбирать адаптивно. Для этого достаточно воспользоваться теорией, изложенной на лекциях. Выполнение данной части задания подразумевает написание параметризации для произвольной лемнискаты с двумя фокусами.
Вкладка Difference содержит разность рисования произвольных лемнискат двумя методами: целочисленный Брезенхем и растеризация произвольной кривой заданной параметрически.
Для положительных значений (D = G_Bresenham - G_Parametrization) используется красный цвет, а для отрицательных - синий цвет. При этом G_k = 0 в случае, если пиксель не закрашен) и Gk = 1 в противоположном случае.
При запуске приложения пользователь должен видеть заданную по-умолчанию лемнискату, которая описывается приведенной ниже параметризаций. Предполагается, что вами выбранно некоторое a, такое, что три точки лемнискаты на оси абсцисс имеют целочисленные координаты. Значение этих точек, а также координат фокусов и параметра a необходимо указать в комментарии к коду инициализации лемнискаты по-уполчанию.
Третий график - функция, заданная указанной ниже параметризацией. Необходимо рисовать ее так, чтобы на графике были видны все ее особенности. При этом шаг выбирается адаптивно так, чтобы не было разрывов линий.
Функцию необходимо рисовать в области просмотра (на вкладке Curve) с центром (0; 1) - центр прямоугольника. Дискретизацию провести по x и y. Для данного графика рекомендуется нарисовать оси абсцисс и ординат со штрихами. Кроме этого, обязательным требованием является регулировка толщины линий. Также рекомендуется реализовать алгоритм сглаживания - устранение ступенчатости при растеризации граничных пикселей (закраска их полутонами в зависимости от площади).
Замечания
Основные требования к задачам сохраняются. Допускается уточнение условий задачи по электронной почте.
Эта задача на оценку и сдается лично. Приветствуется сдача задачи в рекомендуемые сроки.
3 апреля были опубликованы уточнения условий задачи - были оговорены на семинаре 30 марта. После 5 апреля принимаются только задачи, удовлетворяющие уточненным условиям. Уточнения, по большей части, касаются упрощения задания, но рекомендуется внимательно перечитать текст целиком - были отмечены важные моменты.
Дополнительная информация
Данная информация приведена для ознакомления. Допустимо реализовать отдельную вкладку, где реализовать визуализацию шарнирным способом.
По условиям задачи требуется нарисовать лемнискаты с двумя фокусами - овалы Кассини. Их частным случаем является лемниската Бернулли. Для ее рисования существует механический инструмент. Он представляет из себя несколько шарнирных элементов, концы которых закреплены в фокусах. При этом сочленение d шарнира описывает окружность, а середина центрального элемента рисует требуемую кривую.