Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Poyasnitelnaya_zapiska_Tarasenko.docx
Скачиваний:
1
Добавлен:
01.07.2025
Размер:
198 Кб
Скачать
☆
  1. Алгоритмы построения и сохранения изображения

Ключевым моментом решения поставленных задач является построение плоскости и бортиков. Для построения плоскости используется функция 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();

};

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]