Смекни!
smekni.com

Векторный графический редактор (стр. 2 из 3)

3.4 Обоснование выбора среды программирования

Выбор данной среды программирования С++ Builder обусловлен заданием, выданным преподавателем. Достоинством данной среды является то, что в ней реализована идея подлинно визуальной разработки программ. Дизайнер интерфейсов позволяет, не написав ни строчки кода, создавать программы со сложным интерфейсом. Программист лишь пишет важный для работы код, интерфейс за него реализует среда.


4.Конструкторская часть

4.1 Функциональное назначение

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

4.2 Описание логической структуры

Решения поставленной задачи разбивается на несколько частей:

· рисование графических примитивов

· зеркальное преобразование пространства

Алгоритмы рисование графических примитивов

Рисование отрезков прямых

Рисование отрезков прямых производится при помощи функции LineTo(), от текущей позиции до точки, координаты которой указаны, как аргументы данной функции. Текущая позиция изменяется и находится теперь там, где закончилась линия.

Рисование прямоугольников

Рисование отрезков прямых производится при помощи функции Rectangle(), от текущей позиции до точки, координаты которой указаны, как аргументы данной функции. Текущая позиция изменяется и находится теперь там, где закончилась линия.

1)

2)

Рисование треугольников


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

1)


Х

2)


Y

Рисование эллипсов

Для рисования эллипсов нельзя использовать функцию Ellipse(), так как в этом случае пропадает возможность его дальнейшего преобразования «зеркалом». Поэтому рисование эллипсов осуществляется «по точкам», пиксели на форме закрашиваются по заданным математическим формулам, образуя эллипс. При этом визуально создание эллипсов выглядит, как и в случае использования функции Ellipse(): мышью отмечаются координаты верхнего левого и нижнего правого угла прямоугольника, в который вписан эллипс.


1)

2)

Rx=(abs(ex1-ex2))/2;

Ry=(abs(ey1-ey2))/2;

Xc=(ex1+ex2)/2;

Yc=(ey1+ey2)/2;

Алгоритм преобразования пространства

Для преобразования пространства преобразователем типа «зеркало» необходимо начать с создания линии «зеркала». Она рисуется как и обычный примитив line. Далее для зеркального отображения объектов пространства относительно этой линии используется следующий алгоритм состоящий из нескольких шагов:


1.

Находим величину радиус вектора одной из точек прямой, относительно которой осуществляется преобразование

2. Смещаем преобразуемую точку P пространства на вектор –OB, получаем точку P1

О

3. Находим угол α между AB и осью ОХ

О


4. Поворачиваем Р вокруг Р1 на угол α, получаем точку Р2

О

5. Смещаем Р2 на вектор ОВ и получаем точку Р!. Преобразование завершено

О

4.3 Реализация алгоритма преобразования пространства