Реализацию алгоритма преобразования пространства осуществляет метод Mirror (Листинг 3.1.)
Листинг 3.1
void Mirror()
{
ell*zu2_e;
a=(Y1-Y2)/sqrt((Y1-Y2)*(Y1-Y2)+(X1-X2)*(X1-X2));//sin
b=(X1-X2)/sqrt((Y1-Y2)*(Y1-Y2)+(X1-X2)*(X1-X2));//cos
if (x_e!=0)
{
zu2_e=x_e;
while(zu2_e!=0)
{
for(int j=0; j<2048;j++)
{
mx1=zu2_e->x[j];
my1=zu2_e->y[j];
mx1+=-X1;
my1+=-Y1;
xx=mx1*b+my1*a;
yy=-mx1*a+my1*b;
yy=-yy;
mx1=xx*b-yy*a;
my1=xx*a+yy*b;
mx1+=X1;
my1+=Y1;
zu2_e->x[j]=mx1;
zu2_e->y[j]=my1;
}
zu2_e->Draw();
zu2_e=zu2_e->next;
}
}
}
4.4 Основные функции работы с графикой
1) FormMouseDown - производится сохранение координат курсора;
2) FormMouseUp - производится конечная прорисовка изображаемого элемента;
3) FormMouseMove – происходит постоянная перерисовка изображаемого элемента;
4) LineDRW - происходит оповещение программы о том, что будет происходить прорисовка линии.
5) RectDRW - происходит оповещение программы о том, что будет происходить прорисовка прямоугольника.
6) TreDRW1 - происходит оповещение программы о том, что будет происходить прорисовка первой грани треугольника.
7) TreDRW2 - происходит оповещение программы о том, что будет происходить прорисовка двух оставшихся граней треугольника.
8) EllDRW - происходит оповещение программы о том, что будет происходить прорисовка эллипса.
5.1 Назначение программы
Данный программный продукт предназначен для работы с изображением и поэтому должен содержать и выполнять следующие действия:
· Работа с графическими файлами
1. Создание нового графического файла
· Рисование основных геометрических примитивов
1. Рисование отрезков прямых
2. Рисование прямоугольников
3. Рисование треугольников
4. Рисование эллипсов
· Дополнительные возможности редактирования
1. Зеркальное преобразование пространства с нарисованными в нем эллипсами
5.2 Условия выполнения программы
5.2.1 Требования к аппаратной и программной средам
Условия выполнения программы, полученной в результате реализации данного проекта, должны отвечать следующим требованиям:
1) программа должна выполняться во всех операционных системах Windows XP;
2) программа может выполняться на IBM-PC совместимом компьютере с процессором не ниже 80486;
3) для нормального функционирования программы необходим минимальный размер оперативной памяти 16 Мб;
4) для программы необходимо наличие 3 Мб свободного места на жестком диске;
5) для работы с программой необходимо наличие устройства ввода (клавиатура, манипулятор «мышь»);
6) для отображения результатов работы программы необходимо наличие устройства вывода (монитор);
5.3 Руководство пользователя
5.3.1 Выполнение программы
Для обращения к программе необходимо запустить файл “Project1.exe” с гибкого или жёсткого магнитного диска.
Для рисования отрезков прямых, необходимо активизировать radiobutton «line». Далее необходимо переместить указатель мыши на главную форму. Нажмите левой кнопкой мыши и, не отпуская её, переместите курсор мыши в другую точку окна приложения. Отпустите левую кнопку мыши. На экране отобразится линия (рис.4.1.).
Рисунок 4.1. Отображение линии
Для рисования прямоугольников, необходимо активизировать radiobutton «rectangle». Далее необходимо переместить указатель мыши на главную форму. Нажмите левой кнопкой мыши и, не отпуская её, переместите курсор мыши в другую точку окна приложения. Отпустите левую кнопку мыши. На экране отобразится прямоугольник (рис.4.2.).
Рисунок 4.2. Отображение прямоугольника
Для рисования треугольников, необходимо активизировать radiobutton «triangle». Далее необходимо переместить указатель мыши на главную форму. Щелкните левой кнопкой мыши, переместите курсор мыши в другую точку окна приложения, щелкните снова. На экране отобразится первая грань треугольника. Далее перенесите курсор в точку, где должна находиться третья вершина треугольника, щелкните там, прорисуются оставшиеся две грани. На экране отобразится треугольник (рис.4.3.).
Рисунок 4.3. Отображение треугольника
Для рисования эллипсов, необходимо активизировать radiobutton «ellipse». Далее необходимо переместить указатель мыши на главную форму. Нажмите левой кнопкой мыши и, не отпуская её, переместите курсор мыши в другую точку окна приложения. Отпустите левую кнопку мыши. На экране отобразится эллипс (рис.4.4.).
Рисунок 4.4. Отображение эллипса
Для преобразования пространства необходимо активизировать radiobutton «mirror». Далее необходимо переместить указатель мыши на главную форму. Нажмите левой кнопкой мыши и, не отпуская её, переместите курсор мыши в другую точку окна приложения. Отпустите левую кнопку мыши. На экране отобразится линия, относительно которой будет происходить преобразование(рис.4.5.), и произойдет само преобразование (все эллипсы зеркально отобразятся относительно линии) (рис.4.6.).
Рисунок 4.5. Отображение линии зеркала
Рисунок 4.6. Преобразование пространства
Завершение программы происходит после щелчка левой кнопки мыши по кнопке с крестиком в верхнем правом углу окна программы.
Таким образом, цели, поставленные в начале работы, были достигнуты. Была освоена среда программирования C++ Builder, в ходе выполнения требований к поставленной задаче были использованы алгоритмы преобразования пространства а также приоберетены новые навыки программирования на С++. Удалось создать программный продукт, отвечающий пунктам изначально заданных требований. Для создания и небольшой коррекции изображения удобно иметь под рукой быстрый и компактный векторный графический редактор, который позволяет внести необходимые изменения и при этом не потребует больших затрат вашего времени и места на жестком диске.
Такой векторный графический редактор практически не требует места на диске, работает быстро и надежно, не требует больших усилий в его освоении, позволяет создавать и редактировать изображения, что обеспечивает его востребованность у различных пользователей.
Касательно вариантов расширения программного продукта, возможны добавления таких пунктов как пользовательский интерфейс, представляющий собой наглядное отображение возможностей продукта, сохранение изображения в заданном формате, как целиком, так и пообъектно, добавление других видов графических примитивов, применение заливки, изменение цвета контура примитивов на заданный пользователем и многих других.
1) Майкл Дж. Янг, Visual C++, 1999 г.
2) Архангельский А. Я., Программирование в С++ Builder 6, изд. Бином, 2003 г.
3) Архангельский А. Я., С++ Builder 6 справочное пособие (книги 1,2), изд. Бином, 2002 г.
4) Культин Н., Самоучитель С++ Builder, БХВ-Петербург, 2004 г.