- •Задание
- •Введение
- •Описание алгоритмов решения задачи.
- •Общая схема приложения
- •Получение и обработка команд
- •Алгоритмы построения и сохранения изображения
- •Заключение
- •Приложения Приложение а. Структура cPyramid.
- •Приложение б. Описание класса LibGraph.
- •Приложение в. Описание класса cMatrix.
- •Приложение д. Функции аффинных преобразований.
- •Приложение е. Функции преобразования координат.
- •Приложение ж. Функция сохранения изображения в файл
- •Список литературы
Алгоритмы построения и сохранения изображения
Ключевым моментом решения поставленных задач является построение плоскости и бортиков. Для построения плоскости используется функция DrawPool, а для построения бортиков – DrawBorder.
Для решения задачи перемещения и поворота объектов в методах прорисовки поверхности октаэдра с диффузионной и зеркальной моделями освещения использовались аффинные преобразования (приложение Г). Положения октаэдра задается функцией SetPos, изменение положения октаэдра в зависимости от скорости – Move, а начальные параметры задаются в функции SetV.
Для решения задачи изображения трехмерного процесса на двухмерном дисплее с учетом положения наблюдателя использовались матрицы пересчета из мировых координат в видовые и из видовых – в оконные. Первая формируется функцией CreateViewCoords, а вторая – функцией SpaceToWindow. Определения функций представлены в приложении Е.
Задачи сохранения данных решены при помощи встроенных функций библиотек MFC при помощи дескрипторов устройств. Они используются в методе SaveImg (приложение Ж), вызываемом при успешном завершении диалога сохранения файла.
Построение поля, пересчет координат, поверхности октаэдр по настроенным параметрам можно изобразить следующим образом:
нет
Заключение
Разработанное приложение моделирует заданный процесс движения октаэдра по плоскости с задаваемыми начальными параметрами движения. В дальнейшем возможно усовершенствование приложения путем использования аппаратных средств пересчета координат. Возможно сохранение смоделированных изображений в графические файлы. Получены навыки практического использования пакета MFC и математического аппарата аффинных преобразований.
Демонстрация работы приложения:
Рисунок 3 – Демонстрация работы приложения
Приложения Приложение а. Структура cPyramid.
#include "stdafx.h"
class CPyramid
{
CMatrix Vertices; // Координаты вершин
CMatrix Vertices2; // Координаты вершин
void GetRect(CMatrix& Vert,CRectD& RectView);
public:
CPyramid();
void Draw(CDC& dc,CMatrix& P,CRect& RW);
void Draw1(CDC& dc,CMatrix& P,CRect& RW);
void ColorDraw(CDC& dc,CMatrix& PView,CRect& RW,COLORREF Color, CMatrix& PLight, int LightMode);
void ColorDrawD(CDC& dc, CMatrix& PView, CRect& RW, COLORREF Color, CMatrix& PLight);
void ColorDrawP(CDC& dc, CMatrix& PView, CRect& RW, COLORREF Color, CMatrix& PLight, int LightMode);
};
Приложение б. Описание класса LibGraph.
#ifndef LIBGRAPH
#define LIBGRAPH 1
const double pi=3.14159;
//typedef double (*pfunc)(double); // Указатель на функцию
typedef double (*pfunc2)(double,double); // Указатель на функцию
struct CSizeD
{
double cx;
double cy;
};
//-----------------------------------------------------------------------------------
struct CRectD
{
double left;
double top;
double right;
double bottom;
CRectD(){left=top=right=bottom=0;};
CRectD(double l,double t,double r,double b);
void SetRectD(double l,double t,double r,double b);
CSizeD SizeD();
};
