Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
48
Добавлен:
02.05.2014
Размер:
2.38 Кб
Скачать
//---------------------------------------------------------------------------

#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
Соседние файлы в папке KG3