- •Министерство образования и науки Российской Федерации
- •Йошкар-Ола,
- •2012 Г.
- •Задание
- •Введение
- •Двумерные матричные преобразования
- •Однородные координаты и матричное представление двумерных преобразований
- •1. Поворот
- •2. Перенос
- •3. Масштабирование
- •Общий алгоритм геометрических преобразований
- •Алгоритм выполнения программы
Алгоритм выполнения программы
Данная программа написана на языке С++. Ввод данных осуществляется через командную строку.
Коэффициенты масштабирования, угол поворота и новые координаты записаны в коде согласно
варианту.
Описание с начала работы программы:
1) Этап 1: подключение библиотек, запуск графического режима, объявление переменных, рисование в окне координатной оси с обозначенными на ней значениями по Х и по Y.
#include <graphics.h>
#include <stdio.h>
#include <string>
#include <iostream.h>
#include <math.h>
#include <stdlib.h>
void setka ()
{
int i;
setcolor(COLOR(71,71,71));
for(i = 0; i < 800; i = i + 10 ) {
line(10+i, 10, 10+i, 590);
line(10, 10+i, 790, 10+i);
}
setcolor(COLOR(151,151,151));
line(10,300,790,300);
line(400,10,400,590);
line(790,300,780,305);
line(790,300,780,295);
line(400,10,395,20);
line(400,10,405,20);
outtextxy(380, 3, "y");
outtextxy(780, 307, "x");
outtextxy(385, 305, "0");
}
2) Этап 2: Получение данных о начальной точке фигуры (квадрат). Начальные координаты указывают нижний левый угол.
void kvadrat(int x,int y,int w)
{
x=x+400;
y=300-y;
setcolor(COLOR(255,100,0));
line (x,y,x,y-w);
line (x,y-w,x+w,y-w);
line (x+w,y-w,x+w,y);
line (x+w,y,x,y);
printf("Квадрат успешно нарисован! \n");
}
3) Этап3: Выбор пользователем типа преобразования над исходной фигурой (перенос, масштабирование или поворот).
4) Этап4: Рисование преобразованной фигуры новым цветом в координатной плоскости.
5) Этап5: Выбор пользователем дальнейших действий: продолжения ГП или же выход из программы. При продолжении ГП осуществляется переход к пункту 3.
6) Этап6: Выход из графического режима после нажатия на любую клавишу. Завершение работы программы.
7) Этап7: Конец. Завершение работы программы.
Процедура выполняющая ГП:
1) Получение данных о типе преобразования (только одно из трех).
2) В соответствии с выбранным типом ГП получение данных для переноса – перемещение по осям X и Y, для масштабирования – коэффициент масшт. по осям X и Y, для поворота – угол поворота фигуры относительно центра этой фигуры.
3) Выполнение расчетов для определения новых координат вершин фигуры
после преобразования. Для переноса – сложение векторов, осуществляется, в связи с использованием стандартной декартовой системы координат сложением отдельно по осям (X иY).
Аналогично и для масштабирования – расчет идет умножением текущей координаты каждой вершины на коэффициент.
Алгоритм для операции поворота
А) Определяется, находится ли центр фигуры в начале координатной плоскости, если нет, то осуществляется перенос центра фигуры в точку (0,0) с запоминанием расстояние такого переноса (для обратного преобразования).
Б) Расчет новых координат для каждой вершины по указанным формулам (реализуемое умножением матриц, представленное в разложенном виде)
В) Перенос фигуры после порота в начальную точку.
После выполнения необходимых процедур ГП данные о координатах передаются в функцию рисования фигуры, где она выводится на экран (спобом проведения линий от одной точки к другой).
Вывод
В результате проделанной работы мы ознакомились с методами геометрических преобразований графических объектов, вспомнили, что такое Си++, узнали как работать с графикой, произвели базовые преобразования с объектами.
*