Помощь студентам, абитуриентам и школьникам

Консультации и учебные материалы для разработки диссертации, дипломной работы ,курсовой работы, контрольной работы, реферата, отчета по практике, чертежа, эссе и любого другого вида студенческих работ.

  • Форма для контактов
  • Политика конфиденциальности
2009 - 2023 © nadfl.ru

Пример курсовой работы по компьютерному моделированию: Создание программы (редактора), позволяющей синтезировать изображения, построенные на фракталах

Раздел: Курсовая работа

Содержание

Техническое задание4

Постановка задачи5

Введение6

1Алгоритмы синтеза фрактальных изображений13

2Описание программного продукта15

2.1Программно-аппаратные требования15

2.2Язык или среда программирования15

2.3Входные и выходные данные17

2.4Описание структурных элементов программы18

2.5Инструкция пользователю18

Заключение22

Библиографический список23

Приложение А24

Исходные тексты программ24

Выдержка из текста работы

По заданию требуется разработать программу, реализующую цветное движение: вращение многоугольника (количество углов от 3 до 5 задается пользователем).

Алгоритмы работы программ различные, что обусловлено высоким уровнем библиотеки OpenGL и относительно низким уровнем средств DirectX. В алгоритме программы с использованием средств DirectX изначально происходит инициализация DirectDraw, после чего создаются первичная и вторичная поверхности. Далее изображение из битового образа копируется во вторичную поверхность, после чего происходит смена поверхностей. В алгоритме программы с использованием средств OpenGL, после начальной инициализации, рисуются объекты с помощью стандартных функций OpenGL, после чего преобразуются координаты для реализации анимации.

В качестве языка программирования выберем C++. Среда программирования Borland C++5.02.

Оба варианта будут реализованы в одной программе. В начале создается объект класса, который в зависимости от выбранного типа графического движка будет реализовывать либо OpenGL, либо DirectX функции.

Для смены кадров будет использоваться системный таймер (сообщение API: WM_TIMER).

По сообщению WM_DESTROY уничтожаются все созданные переменные как для DirectX, так и для OpenGL.

2. Особенности OpenGL реализации программы

Особенности реализации можно выделить следующие:

  1. Подключение заголовочного файла GL/glaux.h, в котором описаны функции;
  2. Инициализация OpenGL;
  3. Использование ламп;
  4. Использование наложения цветов;
  5. Использование прозрачности объектов;
  6. Работа с координатами (сохранение, восстановление преобразование координат).

Описание алгоритма:

— рисуем многоугольник так, чтобы его центр находился в начале координат;

— анимация реализуется путем поворота осей координат относительно вектора {0,0,1}.

3. Особенности DirectX реализации программы

Особенностей реализации DirectX было значительно больше, выделю лишь основные:

1) Инициализация DirectDraw. (Проверка установки на компьютере пользователя используемых в программе интерфейсах DirectDraw, заполнение основных структур);

2) Поскольку стандартных функций для вывода графических примитивов в DirectDraw нет, программа реализована в качестве анимации;

3) Создание вторичной и первичной поверхностей (используем двойную буферизацию);

4) Создание битового образа, и копирование его во вторичную поверхность;

5) Переключение поверхностей – блитинг;

6)Работа с объектами интерфейса DirectDraw: создание, удаление, использование методов.

Вообще изобразить графические примитивы в DirectDraw можно, например, при помощи GDI. Но это будет медленно, потому что методы DirectDraw позволяют работать напрямую с адаптером. Также алгоритм реализации задания при помощи примитивов был сделан под OpenGL. По всем этим причинам было решено реализовать анимацию под DirectX при помощи блитинга.

4. Фрагменты текста программ

Здесь приведем наиболее значительный по части компьютерной графики код.

4.1. OpenGL

//—Поехали———————————————————————

void polyOGL::Do(HWND hWnd)

{double A=2*0.5*0.5-2*0.5*0.5*cos(3.14*72/180);

static double vect=0;

static int fi=0;

if(Begin)

{fi=0;

Begin=0;

}

glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT );

glPushMatrix();

glRotated(fi,0,0,1);

glColor3f(0,1,0);

if(coner==3)

glBegin(GL_POLYGON);

glVertex3d(0,0.5,0);

glVertex3d(-sqrt(0.25-pow(0.25,2)),-0.25,0);

glVertex3d(sqrt(0.25-pow(0.25,2)),-0.25,0);

glEnd();

if(coner==4)

glBegin(GL_POLYGON);

glVertex3d(0,0.5,0);

glVertex3d(-0.5,0,0);

glVertex3d(0,-0.5,0);

glVertex3d(0.5,0,0);

glEnd();

if(coner==5)

double x1,x2,y1,y2;

y1=A-0.25;

x1=-sqrt(0.25-pow(y1,2));

x2=-sqrt(A)/2;

y2=-sqrt(0.25-pow(x2,2));

glBegin(GL_POLYGON);

glVertex3d(0,0.5,0);

glVertex3d(x1,y1,0);

glVertex3d(x2,y2,0);

glVertex3d(-x2,y2,0);

glVertex3d(-x1,y1,0);

glEnd();

glPopMatrix();

fi+=15;

if(fi==360) fi=0;

SwapBuffers(wglGetCurrentDC());

return;

4.2. DirectX

//—Поехали———————————————————————

void polyDX::Do(HWND hWnd)

static int frame=0;

char dir[]={‘\0′,’\0’};

itoa(coner,dir,10);

if(Begin)

{frame=0;Begin=0;}

char file[10]={«»},str[]={«.bmp»},str1[3]={‘\0′,’\0′,’\0’};

itoa(frame+1,str1,10);

strcat(file,dir);

strcat(file,»\\»);

strcat(file,str1);

strcat(file,str);

hBmp=(HBITMAP)LoadImage(NULL, file, IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE);

GetObject (hBmp, sizeof(BITMAP), &Bmp);

ddsd.dwSize = sizeof ( ddsd );

ddsd.dwFlags = DDSD_CAPS | DDSD_WIDTH | DDSD_HEIGHT;

ddsd.ddsCaps.dwCaps = DDSCAPS_OFFSCREENPLAIN | DDSCAPS_SYSTEMMEMORY;

ddsd.dwWidth=Bmp.bmWidth;

ddsd.dwHeight=Bmp.bmHeight;

lpDD->CreateSurface(&ddsd, &lpDDSec, NULL);

HDC HDCImage = NULL;

HDC HDCSurface = NULL;

HDC ThisDevice = NULL;

HDCImage=CreateCompatibleDC(NULL);

SelectObject(HDCImage, hBmp);

lpDDSec->GetDC(&HDCSurface);

ddsd.dwSize=sizeof(ddsd);

ddsd.dwFlags=DDSD_HEIGHT|DDSD_WIDTH;

lpDDSec->GetSurfaceDesc(&ddsd);

BitBlt(HDCSurface, 0,0,ddsd.dwWidth,ddsd.dwHeight, HDCImage, 0, 0, SRCCOPY);

lpDDSec->ReleaseDC(HDCSurface);

DeleteDC(HDCImage);

//GetClientRect(hWnd,&ClientRect);

BMPRect.top=0;

BMPRect.bottom=Bmp.bmHeight;

BMPRect.left=0;

BMPRect.right=Bmp.bmWidth;

RECT rr;

rr.left=ClientRect.left;rr.top=ClientRect.top;

rr.bottom=BMPRect.bottom+ClientRect.top;rr.right=BMPRect.right+ClientRect.left;

lpDDPrim->Blt(&rr,lpDDSec,&BMPRect,DDBLT_WAIT,NULL);

frame++;

lpDDSec->Release();

lpDDSec=NULL;

if(frame==10)frame=0;

return;

Литература

1. Рихтер Дж. Windows для профессионалов, – М.: Изд-во “Русская Редакция”, 2001.

2. Порев В. Компьютерная графика. Учебное пособие. – СПб.: «БХВ-Петербург», 2002.

Похожие работы

  • курсовая  Изображение пейзажа на уроках ИЗО в 5-8 классах
  • контрольная  9.21. Построить на одном графике кривые зависимости напряженности Е электрического поля от расстояния r в интервале 1 ≤ r ≤ 5 см через каждый 1
  • дипломная  Разработка программ повышения производительности труда персонала организации (на примере ООО"К- Системс").
  • дипломная  Создание программ
  • контрольная  На щель шириной a = 20 мкм нормально падает пучок монохроматического света с длиной волны Лямбда = 500 нм. Найти ширину дельта x изображения щели на экране
  • контрольная  4 задачи. Построить на плоскости область допустимых решений системы линейных неравенств и найти максимальное и минимальное значения линейной функции цели в

Свежие записи

  • Прямые и косвенный налоги в составе цены. Методы их расчетов
  • Имущество предприятия, уставной капиталл
  • Процесс интеграции в Европе: достижения и промахи
  • Учет уставного,резервного и добавочного капитала.
  • Понятие и сущность кредитного договора в гражданском праве.

Рубрики

  • FAQ
  • Дипломная работа
  • Диссертации
  • Доклады
  • Контрольная работа
  • Курсовая работа
  • Отчеты по практике
  • Рефераты
  • Учебное пособие
  • Шпаргалка