Добавил:
Studfiles2
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:Лабораторные работы3 / KG3 / matrix
.h//---------------------------------------------------------------------------
#ifndef matrixH
#define matrixH
#include "vcl.h"
#define SIZE_MAX 4
/* Класс операций над матрицами */
class TMatrix
{
private:
/* Ширина матрицы */
int shirina;
/* Высота матрицы */
int vysota;
/* Данные матрицы */
float data[SIZE_MAX][SIZE_MAX];
public:
/* Конструкторы */
TMatrix();
TMatrix(int sh,int vys);
TMatrix(int sh,int vys, float* values);
/* Изменение значения элемента [x][y] на value */
void SetData(int x,int y,float value);
/* Задание ширины матрицы */
void SetSizeX(int value);
/* Задание высоты матрицы */
void SetSizeY(int value);
/* Получить значение элемента [x][y] */
float GetData(int x,int y);
/* Получить ширину матрицы */
int GetSizeX();
/* Получить высоту матрицы */
int GetSizeY();
/* Оператор сложения матриц */
TMatrix operator +(TMatrix mat2);
/* Оператор вычитания матриц */
TMatrix operator -(TMatrix mat2);
/* Умножение матриц */
TMatrix operator *(TMatrix mat2);
/* Нахождение обратной матрицы */
TMatrix operator !();
/* Нахождение транспонированной матрицы */
TMatrix T(TMatrix mat);
};
/* Структура точки в трехмерной системе координат */
struct point3D
{
float x;
float y;
float z;
/* Умножение точки (вектора) на матрицу */
point3D operator *(TMatrix mat2)
{
TMatrix resultMatrix(4, 1);
TMatrix matPoint(4, 1);
matPoint.SetData(0, 0, x);
matPoint.SetData(0, 1, y);
matPoint.SetData(0, 2, z);
matPoint.SetData(0, 3, 1);
resultMatrix = matPoint*mat2;
point3D tempPoint;
if (resultMatrix.GetData(0,3) != 0)
{
tempPoint.x = (float)resultMatrix.GetData(0,0)/(float)resultMatrix.GetData(0, 3);
tempPoint.y = (float)resultMatrix.GetData(0,1)/(float)resultMatrix.GetData(0, 3);
tempPoint.z = (float)resultMatrix.GetData(0,2)/(float)resultMatrix.GetData(0, 3);
}
else
{
tempPoint.x = resultMatrix.GetData(0,0);
tempPoint.y = resultMatrix.GetData(0,1);
tempPoint.z = resultMatrix.GetData(0,2);
}
return tempPoint;
}
};
/* Структура точки в экранной системе координат */
struct point2D
{
float x;
float y;
};
//---------------------------------------------------------------------------
#endif