
- •Лабораторная работа №2
- •Содержание
- •Постановка задачи.
- •Структура решения.
- •Обзор и анализ методов решения задачи.
- •Вычисление координат точки при аксонометрическом проецировании.
- •Вычисление координат точки при перспективном проецировании.
- •Описание применяемых методов.
- •Вычисление координат точек при аксонометрическом проецировании.
- •Вычисление координат точек при перспективном проецировании.
- •Руководство программиста.
- •Руководство пользователя.
- •Результаты.
-
Руководство программиста.
Схема элементов интерфейса
Функциональная
схема программы
Опишем заголовки классов и методов:
class Tspatial
{
private:
/* Канва для отрисовки */
TCanvas* canva;
/* Координаты осей координат */
point3D XBegin, XEnd, YBegin, YEnd, ZBegin, ZEnd;
/* Координаты точки и камеры */
point3D P, C;
/* Координаты точек проекций */
point3D P1, P2, P3, Px, Py, Pz;
/* Точка О - координаты центра */
point2D O;
/* Длина осей и угол между У и -Х */
float lengthOS, alpha;
/* Угол поворота вокруг OX */
float angleX;
float angleY;
/* Конвертируем точку для экранной системы координат */
point2D convert(point3D);
/* Переводим градусы в радианы */
float radian(float alpha);
/* тип проекции */
char proection;
/* текущее состояние: рисовать / камера внутри / выход за границы */
char status;
/* Проверка выхождения линий за пределы области отрисовки */
bool ifLineOut();
public:
/* Конструктор */
Tspatial(TCanvas* tempc);
/* Задаем базовые параметры */
void setParams(float oX, float oY, float temp_lengthos, float temp_alpha);
/* Вызываем все необходимые изменения */
void change();
/* Изменяем координаты камеры, подсчеты относительно угла поворота */
void changeAngle (int x, int y, int z);
/* Изменяем координаты точки */
void changePoint (int x, int y, int z);
/* Изменения типа проецирования */
void changeProection (char type);
/* Выполнение основных вычислений */
void calculate();
/* Отрисовка */
void draw();
};
class Tcomplex
{
private:
/* Канва для отрисовки */
TCanvas* canva;
/* Координаты осей координат */
point3D XBegin, XEnd, ZBegin, ZEnd;
/* Координаты точки и камеры */
point3D P, C;
/* Точки пароекций */
point2D P1,P2,P3,C1,C2,C3;
/* Точка О - координаты центра */
point2D O;
/* Перевод координат в экранную систему координат */
point2D convert (point3D point);
/* Длина осей */
float lengthOS;
public:
/* Конструктор */
Tcomplex (TCanvas* tempc);
/* Задаем базовые параметры */
void setParams(float oX, float oY, float temp_lengthos);
/* Вычисления */
void calculate();
/* Отрисовка */
void draw();
/* Изменение координат */
void change();
};
/* Класс операций над матрицами */
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);
};
/* Структура точки в экранной системе координат */
struct point2D
{
float x;
float y;
};
class TForm1 : public TForm
{
__published: // IDE-managed Components
TImage *Image1;//Image для отрисовки простр. чертежа
TImage *Image2;//Image для отрисовки комплекс. чертежа
TTrackBar *TrackBar1;//Ползунок Х точки
TTrackBar *TrackBar2;//Ползунок У точки
TTrackBar *TrackBar3;//Ползунок Z точки
TTrackBar *TrackBar4;//Ползунок Х камеры
TTrackBar *TrackBar5;//Ползунок У камеры
TTrackBar *TrackBar6;//Ползунок Z камеры
TRadioGroup *RadioGroup1; //Компонент выбора типа проекции
TRadioButton *RadioButton1;
TRadioButton *RadioButton2;
/* Все Labels */
TLabel *Label1;
TLabel *Label2;
TLabel *Label3;
TLabel *Label4;
TLabel *Label5;
TLabel *Label6;
TLabel *Label7;
TLabel *Label8;
TLabel *Label9;
TLabel *Label10;
TLabel *Label11;
TLabel *Label12;
TLabel *Label13;
TLabel *Label14;
TLabel *Label15;
TLabel *Label16;
TLabel *Label17;
TLabel *Label18;
TLabel *Label19;
TLabel *Label20;
/* Событие при открытии программы */
void __fastcall FormCreate(TObject *Sender);
/* Событие при изменении любого ползунка координат камеры */
void __fastcall CameraChange(TObject *Sender);
/* Событие при изменении любого ползунка координат точки */
void __fastcall PointChange(TObject *Sender);
/* Изменение типа проекции */
void __fastcall ProectionChange(TObject *Sender);
private: // User declarations
public: // User declarations
__fastcall TForm1(TComponent* Owner);
};