Геометрические преобразования в пространстве
Автор: True Cruning • Октябрь 25, 2020 • Лабораторная работа • 4,289 Слов (18 Страниц) • 343 Просмотры
ПЕНЗЕНСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ
Кафедра «Компьютерные технологии»
Отчет о выполнении лабораторной работы №3
«ГЕОМЕТРИЧЕСКИЕ ПРЕОБРАЗОВАНИЯ В ПРОСТРАНСТВЕ»
по дисциплине «Компьютерная графика»
Вариант 1
Выполнил: студент гр. 17ВГ1 Дебердеев Т. И.
Проверил: к.т.н., доц. Абрамов И. А.
Пенза, 2020
Цель работы:
Составить программу для трёхмерных преобразований и вычисления плоских проекций трёхмерных объектов. Продемонстрировать результаты на экране компьютера.
Задание:
Разработать функцию для построения графической фигуры в параллельной проекции согласно заданию (см. варианты). Разработать функции, выполняющие заданные по варианту преобразования. Разработать функцию, выполняющую отображение фигуры в перспективной проекции.
Вариант задания:
[pic 1]
Ход выполнения работы:
#include <Windows.h>
#include <cmath>
#include <string>
#define PI 3.14159245
char szClassName[] = "CG_WAPI_Template";
bool ProjectionFlag;
double Rotation[4][4];
double Moving[4][4];
double Scaling[4][4];
double Mirror[4][4];
double Projection[4][4];
double ProjectionXY[4][4];
double figurePoint[9][4] = { {-100,0,100,1},
{-100,0,-100,1},
{100,0,-100,1},
{100,0,100,1},
{-50,-50,50,1},
{-50,-50,-50,1},
{50,-50,-50,1},
{50,-50,50,1},
{0,100,0,1}
};
void InitRotation()
{
for (size_t i = 0; i < 4; ++i) {
for (size_t j = 0; j < 4; ++j) {
Rotation[i][j] = 0;
Moving[i][j] = 0;
Scaling[i][j] = 0;
Mirror[i][j] = 0;
Projection[i][j] = 0;
ProjectionXY[i][j] = 0;
}
Rotation[i][i] = 1;
Moving[i][i] = 1;
Scaling[i][i] = 1;
Mirror[i][i] = 1;
Projection[i][i] = 1;
ProjectionXY[i][i] = 1;
}
}
void SetRotationMatrix(double R) {
Rotation[0][0] = cos((R * PI) / 180);
Rotation[1][0] = -sin((R * PI) / 180);
Rotation[0][1] = sin((R * PI) / 180);
Rotation[1][1] = cos((R * PI) / 180);
}
void SetMovingMatrix(double R) {
Moving[3][0] = R;
}
void SetScalingMatrix(double R) {
Scaling[1][1] = R;
}
void SetMirrorMatrix() {
Mirror[2][2] = -1;
}
void SetProjectionXYMatrix(double R) {
ProjectionXY[0][3] = R;
ProjectionXY[1][3] = R;
}
void SetProjectionMatrix() {
Projection[1][1] = cos((20 * PI) / 180);
Projection[1][2] = -sin((20 * PI) / 180);
Projection[2][1] = sin((20 * PI) / 180);
Projection[2][2] = cos((20 * PI) / 180);
}
void Multiply(double Matr1[9][4], double Matr2[9][4], double conversion[4][4])
{
for (size_t i = 0; i < 9; ++i)
{
double buf[4] = { Matr1[i][0],Matr1[i][1],Matr1[i][2], Matr1[i][3] };
for (size_t j = 0; j < 4; ++j)
{
Matr1[i][j] = 0;
for (size_t k = 0; k < 4; ++k)
Matr1[i][j] += buf[k] * conversion[k][j];
}
}
for (size_t i = 0; i < 9; ++i)
for (size_t j = 0; j < 3; ++j)
Matr2[i][j] = Matr1[i][j] / Matr1[i][3];
}
void Multiply(double Matr1[9][4], double conversion[4][4])
...