Этап
|
Дата начала
|
Дата окончания
|
Исследование объектов
автоматизации
|
10.09.12
|
01.10.12
|
Формирование требований к
программному обеспечению
|
01.10.12
|
15.10.12
|
Разработка структуры
программного обеспечения
|
16.10.12
|
26.10.12
|
Разработка и утверждение
технического задания
|
27.10.12
|
10.11.12
|
Программная реализация
|
11.11.12
|
1.12.12
|
Тестирование и отладка
системы
|
2.12.12
|
8.12.12
|
Подготовка документации
|
20.12.12
|
Опытная эксплуатация
|
21.12.12
|
28.12.12
|
1.8 Порядок
контроля и приемки
Контроль программного обеспечения и его приемка осуществляется в
следующей последовательности:
1. Тестирование программы осуществляется по следующим
параметрам: выдача корректных результатов при любом наборе входных данных,
стабильность работы программы при выполнении любых доступных функций на каждом
шаге ее работы.
2. Выполняется исправление недостатков и ошибок программы,
выявленных в результате тестирования.
3. Проводится повторное тестирование программного обеспечения и
исправление его ошибок.
4. После устранения всех выявленных ошибок программное
обеспечение сдается в эксплуатацию.
2. Описание
программы
2.1 Общие
сведения
Наименование программного обеспечения: "Программное обеспечение
изображения вращения пирамиды в центральной проекции".
Краткое наименование программного обеспечения: "Pyramide".
Для функционирования данной программы необходима операционная система Windows 2000 или выше.
Исходным языком программирования является C++. Среда разработки, компилятор Borland C++Builder 6.
2.2
Функциональное назначение
Программное обеспечение предназначено для демонстрации вращения пирамиды
вокруг произвольно-задаваемой оси.
2.3 Описание
логической структуры
При запуске программы появляется главное окно программы (рисунок 2.1),
которое содержит меню, область просмотра, и управляющие элементы:
"Координаты вектора вращения", "Угол вращения", "Тип
движения" и кнопки действий. "Координаты вектора вращения"
позволяет задать ось вращения. "Угол вращения" предлагает выбрать
пользователю угол поворота или вращения. "Тип движения" определяет
выполняемое программой действие - поворот или вращение. Управляющая кнопка
позволяет запустить программу. В главном меню можно сохранить изображение,
загрузить изображение и завершить работу программы.
Рисунок 2.1 - Главное окно программы
При выборе пункта - "Вращать постоянно", пирамида начинает
вращаться. В случае убирания пункта - "Вращать постоянно", пирамида
поворачивается вокруг установленной оси на заданный угол.
После выбора оси вращения, угла вращения и типа движения, кнопка
"Вращать" осуществляет выбранное действие с заданными параметрами.
При неподвижном изображении пирамиды у пользователя имеется возможность сохранения,
как всего изображения, так и его части. Сохранение всего изображения
осуществляется при выборе пункта меню "Сохранить изображение".
Сохранение части изображение выполняется с помощью манипулятора
"мышь".
При выборе пункта меню "Справка" можно получить краткое
описание данного программного продукта и информация о её разработчике.
При выборе пункта меню "Выход" приложение завершает работу.
2.4
Используемые технические средства
Техническое обеспечение необходимое для работы программы:
· оперативная память 1024 Мб и выше;
· двуядерный процессор Intel Core 2 Duo 2
ГГц;
· существование логических и/или физических дисков со свободным
дисковым пространством 250 Мб и выше;
· клавиатура;
· манипулятор "мышь";
· видеоадаптер SVGA и
выше.
2.5 Вызов и
загрузка
Для функционирования программного обеспечения на персональном компьютере
должна быть установлена операционная система Windows 2000/XP/Vista/7. Для вызова данного программного
продукта Pyramide осуществляется запуск исполняемого
файла Pyramide.exe
2.6 Входные
данные
Входными данными для программного обеспечения Pyramide являются:
· ось вращения (x, y, z -компоненты);
· угол поворота;
· выбор между вращением и поворотом;
2.7 Выходные
данные
Выходными данными программного обеспечения Pyramide являются:
· выведенное изображение пирамиды;
3. Текст программы
#include <math.h>
#include <vcl.h>
#pragma hdrstop
#include "cursesrc.h"
#pragma package(smart_init)
#pragma resource "*.dfm"*mainform; rv[3]; float angle; //угол и
вектор вращения
#define vv 5.2
float vvminx = -vv, vvminy = -vv, vvminz = 0, //значения наблюдаемых
минимумов= vv, vvmaxy = vv, vvmaxz = vv,//значения наблюдаемых максимумов= 8,
vpy = 10, vpz = 6.4, //точка наблюдения= 16, //расстояние до наблюдателя,
cosine,//переменные для хранения синуса и косинуса, prjminy, prjmaxx,
prjmaxy;//расстояния до плоскости проекции
#undef vvgrmaxx, grmaxy;//величина x и y на изображенииxcoef, ycoef; //
временные коэффициентыpyramid3d { float v[6][3]; }; //5 вершин: верхушка и 4
остальные вершиныd pyra = { { { 2, 0, 5 }, //верх пирамиды
//^^^^^^^^^база^^^^^^^^^^^^^^
{ -3, -3, 0 }, //координаты 1-ой вершины
{ -2, 2, 0 }, //координаты 2-ой вершины
{ 2, 2, 0 }, //координаты 3-ей вершины
{ 4, 0, 0 }, //координаты 4-ей вершины
{ 2, -2, 0 } } }; //координаты 5-ой вершины
//^^^^^^^^^^^^^^^^^^^^^^^^^^^pyr_color = clBlack;
// *** прототипы функций ***drawpyra(pyramid3d& pyraref);
//прорисовывает 3d пирамидуcalcx (float x, float y, float z); //вычисляет
экранную координату OXcalcy (float x, float y, float z); //вычисляет экранную
координату OY
// ***************************void imgline (int left, int
top, int right, int bottom)
{ mainform -> viewport -> Canvas -> MoveTo(left,
top); mainform -> viewport -> Canvas -> LineTo(right, bottom);
}wrongvals = false;initpaint() //инициализация параметров для прорисовки
{if (mainform -> rv_xval ->
Text==""||mainform -> rv_yval -> Text==""||mainform
-> rv_zval -> Text=="")
{for (int i=0;i<3;i++) rv[i]=0;}{[0] = mainform ->
rv_xval -> Text.ToInt();[1] = mainform -> rv_yval -> Text.ToInt();[2]
= mainform -> rv_zval -> Text.ToInt();
}tmpval = sqrt (rv[0]*rv[0] + rv[1]*rv[1] + rv[2]*rv[2]);=
(tmpval == 0? true: false);(wrongvals)
{(NULL, "Неправильное(ые) значение(я) указан(ы) для вектора
вращения."
"\nПроверьте координаты вектора вращения.",
"Предупреждение!", MB_OK | MB_ICONERROR);
return;
}[0] /= tmpval; rv[1] /= tmpval; rv[2] /= tmpval;= M_PI *
(float) (mainform -> angleval -> Text.ToInt())/180;
}
__fastcall Tmainform::Tmainform(TComponent* Owner) :
TForm(Owner) //начало
{();
//----------начальные вычисления--------------= viewport -> Width,
grmaxy = viewport -> Height;= vpy / sqrt(vpx * vpx + vpy * vpy);= vpx /
sqrt(vpx * vpx + vpy * vpy);= calcx (vvmaxx, vvminy, vvminz);= calcy (vvmaxx,
vvmaxy, vvminz);= calcx (vvminx, vvmaxy, vvmaxz);= calcy (vvminx, vvminy,
vvmaxz);= grmaxx / (prjmaxx - prjminx); // временные= grmaxy / (prjmaxy - prjminy); //коэффициенты
//--------------------------------------------> Canvas
-> Pen -> Color = pyr_color;
drawpyra(pyra); //рисует начальное изображение пирамиды
{ if (savedlg -> Execute()) viewport -> Picture ->
SaveToFile (savedlg -> FileName); }__fastcall
Tmainform::restoreprjitemClick(TObject *Sender)
{ if (opendlg -> Execute()) viewport -> Picture ->
LoadFromFile (opendlg -> FileName); }__fastcall
Tmainform::exititemClick(TObject *Sender) //выход из программы
{ exit(0); }__fastcall Tmainform::aboutitemClick(TObject
*Sender) //copyright info
{(NULL, "Курсовая работа Чайка Николая и Копыловой Веры\n"
"\n**********************************\n"
"Программа реализует вывод и вращение \n"
"пирамиды в центральной проекции. Парамерты\n"
"вращения задаются координатами вектора\n"
"вращения и углом вращения."
,
"О программе", MB_OK | MB_ICONQUESTION);
}calcx (float x, float y, float z) //вычисляет экранную координату OX
{ return (-vd * (-(x - vpx) * sine + (y - vpy) * cosine)) /
((x - vpx) * cosine + (y - vpy) * sine); }calcy (float x, float y, float z)
////вычисляет экранную координату OY
{ return -vd * (z - vpz) / ((x - vpx) * cosine + (y - vpy) *
sine); }drawpyra(pyramid3d& pyraref) //прорисовывает 3d пирамиду
{i; int scrv[6][2]; float *vptr;
for (i = 0; i < 6; ++i) //вычисление экранных координат вершин
{= pyraref.v[i];[i][0] = (calcx(vptr[0],vptr[1],vptr[2]) - prjminx) *
xcoef;
scrv[i][1] = grmaxy - (calcy(vptr[0], vptr[1], vptr[2]) -
prjminy) * ycoef;
}
#define imacro ((i != 5)? (i+1): 1)//макрос для связывания вершин
for(i=1; i<6; imgline(scrv[0][0], scrv[0][1], scrv[i][0],
scrv[i][1]), ++i)(scrv[i][0], scrv[i][1], scrv[imacro][0], scrv[imacro][1]);
#undef imacro
}A[3][3]; //матрица вращенияcalcA() //вычисляет матрицу
для вращения
{tmpsine = sin(angle), tmpcosine = cos(angle), tmp;(char i=0,
j; i<3; ++i)(j=0; j<3; A[i][j] += tmpcosine * ((i==j?1:0) - A[i][j]),
++j)[i][j] = rv[j] * rv[i];= tmpsine * rv[2];A[0][1] += -tmp;A[1][0] += tmp;=
tmpsine * rv[1];A[0][2] += tmp; A[2][0] += -tmp;= tmpsine * rv[0];A[1][2] +=
-tmp;A[2][1] += tmp;
}rotate (float& x, float& y, float& z) //вращает точку вокруг rv (вектора вращения)
{tmp[3] = { 0, 0, 0 }; char i, j;(i=0; i<3; ++i) for(j=0;
j<3; ++j) tmp[i] += A[i][j] * (*(&x+j));(i=0; i<3; ++i) *(&x + i)
= tmp[i];
}rotatepyra (pyramid3d& pyra) //вращает указанную пирамиду вокруг rv
(вектора вращения)
{ calcA(); for (char i=0; i<6; ++i) rotate(pyra.v[i][0],
pyra.v[i][1], pyra.v[i][2]); }inline redrawpyra() //подпрограмма перерисовки пирамиды
{>viewport->Canvas->Pen->Color = clWhite;
drawpyra(pyra);-> viewport -> Canvas -> Pen -> Color =
pyr_color;(pyra); drawpyra(pyra);
}__fastcall Tmainform::rotatebtnClick(TObject *Sender)
{(pyratimer -> Enabled) pyratimer -> Enabled = false;
else //выбор длительного или единичного вращения
{(); //перевычисляет угол и вектор вращения
if (wrongvals) return;(rotatechkbox -> Checked) pyratimer
-> Enabled = true;redrawpyra();
}-> Caption = (pyratimer -> Enabled)? "Стоп": "Вращение";
}__fastcall Tmainform::pyratimerTimer(TObject *Sender)
{ redrawpyra(); }R; // R - прямоугольная область выделения
bool RBegin = false, RegionSelected = false;
// RBegin - флаг начала выделения фрагмента
// RegionSelected - флаг того, что выделение области уже произведено
// подпрограмма обработки нажатия на кнопку Сохранить как...
void __fastcall Tmainform:: saveprjitemClick(TObject *Sender)
{(RegionSelected==true)
{
// Стирание рамки>viewport->Canvas->DrawFocusRect(R);
// Создание временного объекта ВМСору::TBitmap *BMCopy = new Graphics::TBitmap;>Width = R.Right
- R.Left;>Height = R.Bottom - R.Top;
{
// Копирование фрагмента в ВМСору>Canvas->CopyRect(Rect(0,0,BMCopy->Width,BMCopy->Height),mainform->viewport->Canvas,R);
// Восстановление рамки>viewport->Canvas->DrawFocusRect(R);
}
__finally
{(savedlg->Execute())>SaveToFile(savedlg->FileName);
// Освобождение памяти>Free();;
}
}
// Сброс флагов= false;= true;
}
//---------------------------------------------------------------------------XO,
YO; // Координаты для запоминания начального положения курсора мыши
// Если кнопка
мыши нажата__fastcall Tmainform::viewportMouseDown(TObject
*Sender,Button, TShiftState Shift, int X, int Y)
{
// Если область уже выделялась ранее, то очищаем предыдущее выделение
if(RegionSelected==true)
{>viewport->Canvas->FillRect(R);>viewport->Canvas->Pen->Color
= clWhite; drawpyra(pyra);-> viewport -> Canvas -> Pen -> Color =
pyr_color;
drawpyra(pyra);
}
// Запоминание начального положения курсора мыши= X;= Y;
// Формирование начального положения области фрагмента
R.Top = X;.Bottom = X;.Left = Y;.Right = Y;
// Рисование рамки>viewport->Canvas->DrawFocusRect(R);
RBegin = true; // Флаг начала выделения - выделение начато= false; //
Область выделения ещё не выбрана
//---------------------------------------------------------------------------__fastcall
Tmainform::viewportMouseMove(TObject *Sender,Shift, int X, int Y)
{(RBegin == true)
{
// Стирание прежней рамки
mainform->viewport->Canvas->DrawFocusRect(R);
// Формирование области R(XO<X)
{.Left = XO;.Right = X;
}
{.Left = X;.Right = XO;
}(YO<X)
{.Top = YO;.Bottom = Y;
}
{.Top = Y;.Bottom = YO;
}
// Рисование новой рамки
mainform->viewport->Canvas->DrawFocusRect(R);
}
}
//---------------------------------------------------------------------------
// Если кнопка
мыши отжата__fastcall Tmainform::viewportMouseUp(TObject *Sender,Button,
TShiftState Shift, int X, int Y)
{= false; // Флаг начала выделения сбрасываем - выделение закончено=
true; // Заносим в флаг, что область выделена
}
//---------------------------------------------------------------------------
4.
Руководство программиста
4.1
Назначение и условия применения программы
Назначение программы
Программное обеспечение Pyramide предназначено для изображения вращения пирамиды в центральной проекции.
В данном программном обеспечении были реализованы следующие функции:
· выбор оси вращения и угла поворота фигуры;
· выбор режима работы программы - вращение или поворот фигуры;
· вывод изображения пирамиды.
Условия
применения программы
Техническое обеспечение необходимое для функционирования программы:
· операционная система Windows 2000/XP/Vista/7;
· оперативная память 1024 Мб и выше;
· процессор Intel Core 2 Duo 2 ГГц;
· существование логических и/или физических дисков со свободным
дисковым пространством 250 Мб и выше;
· видеоадаптер SVGA и
выше.
Для функционирования данной программы необходимо, что бы у пользователя
была установлена операционная система Windows 2000/XP/Vista/7.
4.2
Характеристика программы
Программа Pyramide можно
разделить на два взаимосвязанных модуля:
1) подсистемы
графического интерфейса;
2) подсистема
расчета положения фигуры.
Исходным языком программирования для программы является С++. Среда
разработки, компилятор - Borland C++Builder 6.
Интерфейс полностью реализован с использованием визуальных компонентов Borland C++Builder 6. В
программе все основные компоненты расположены на единственной форме.
В программе пользователь может задать такие параметры как: координаты
вектора вращения (рисунок 4.1), угол вращения (рисунок 4.2), тип движения
(рисунок 4.3).
Рисунок 4.1 - Группа элементов "Координаты вектора вращения"
Рисунок 4.2 -элемент "Угол вращения"
Рисунок 4.3 -элемент "Вращать постоянно"
При нажатии на кнопку "Вращать", программа выводит на экран
изображение пирамиды в центральной проекции с параметрами, заданными
пользователем. При выборе пункта - "Вращать постоянно", пирамида
начинает вращаться. В случае убирания пункта - "Вращать постоянно",
пирамида поворачивается вокруг установленной оси на заданный угол.
Также в программе реализована краткая справка об основных функциях
программы (рисунок 4.4). Ее вызов осуществляется при выборе одноименного пункта
меню.
Рисунок 4.4 - Окно справки
4.3 Обращение
к программе
Программа запускается открытием файла Pyramide.exe, после чего она готова к работе и ожидает действий
пользователя.
4.4 Сообщения
Программа не выдает никаких сообщений.
5.
Руководство оператора
5.1
Назначение программы
Программное обеспечение Pyramide предназначено для изображения вращения пирамиды на примере центральной
проекции. Вращение осуществляется с помощью матричных преобразований.
В данном программном обеспечении были реализованы следующие функции:
· выбор оси вращения и угла поворота фигуры;
· выбор режима работы программы - вращение или поворот фигуры;
· вывод изображения пирамиды.
5.2 Условия
выполнения программы
Техническое обеспечение на стороне пользователя, необходимое для
функционирования программы:
· оперативная память 1024 Мб и выше;
· процессор Intel Core 2 Duo 2 ГГц;
· логический и/или физический диски со свободным дисковым
пространством 250 Мб и выше;
· клавиатура;
· манипулятор "мышь";
· видеоадаптер SVGA и
выше.
Для функционирования данной программы необходимо, что бы у пользователя
была установлена операционная система Windows 2000/XP/Vista/7 и библиотека .NET Framework 2.0.
5.3
Выполнение программы
Программа запускается открытием файла Pyramide.exe, после этого она готова к работе и ожидает действий
пользователя.
Пользователь выбирает ось вращения, задает угол вращения, тип движения
(вращение или поворот) и нажимает кнопку "Вращение". Действие с
заданными параметрами выполняется, на экран выводится результат в виде
изображения пирамиды в центральной проекции.
5.4 Сообщения
оператору
При указании неправильных значений для вектора вращения программа выдает
сообщение (рисунок 5.1).
6. Программа
и методика испытаний
6.1 Объект
испытаний
Наименование программного обеспечения: "Программное обеспечение для
изображения вращения пирамиды на примере центральной проекции".
Краткое наименование программного обеспечения: Pyramide.
Возможные области применения программного обеспечения Pyramide:
· в качестве учебно-методического материала.
6.2 Цель
испытаний
Целью данных испытаний являются проверка работоспособности программного
обеспечения и соответствие программы и результатов ее работы требованиям
корректности, надежности и правильности предъявленными в техническом задании.
6.3
Требования к программе
Программа Pyramide должна
выполнять поворот пирамиды на любой угол вокруг любой оси. Программное
обеспечение должно состоять из модулей, обеспечивающих гибкую настройку под
конкретные нужды пользователя. Каждый модуль должен выполнять определенную
функцию. Добавление или удаление какого-либо модуля не должно влиять на
выполнение основной задачи и не должно приводить к отказам программы. Во время
эксплуатации программы при условии соблюдения всех требований, перечисленных в
пункте 1.4 "Технического задания", общий процент отказов программы не
должен превышать 3%. Все возможные ошибки обрабатываются операционной системой.
В процессе функционирования программное обеспечение Pyramide не должно влиять на работу любых
других программных средств и не приводить к сбоям в работе компьютера и
операционной системы. Диагностирование программного обеспечения должно
производиться при соблюдении условий эксплуатации указанных в разделе 1.4
"Технического задания".
6.4
Требования к программной документации
При испытании программы Pyramide использовались следующие документы:
· "Техническое задание";
· "Описание программы";
· "Руководство программиста";
· "Руководство оператора".
6.5 Средства
и порядок испытаний
Технические средства, используемые во время испытаний:
· процессор Intel Core 2 Duo, Intel Core 2 Quad;
· оперативная память в объеме 1024, 2048 Мб;
· свободное место на диске в объеме 500 Мб;
· стандартная клавиатура;
· манипулятор "мышь".
Во время испытаний использовалась операционная система Windows 7.
Испытания программы проводились в следующем порядке:
· испытание на корректность (адекватно ли программа реагирует
на ввод-вывод информации);
· испытание на правильность (соответствуют ли полученные
результаты ожидаемым);
· испытание на надежность (процент отказов и сбоев системы).
6.6 Методы испытаний
Проверка на
корректность
Был произведен запуск программы.
На первом шаге тестирования была проведена проверка работы основных
кнопок программы. Был испробован различный порядок нажатия кнопок, на все
действия реакция про-граммы была запланированной и результат не отличался от
ожидаемого.
На втором шаге были произведены различные настройки, которые
предоставляются программным обеспечением, что соответствующим образом повлияло
на отображение результата.
На третьем шаге был произведен ввод некорректной информации в виде
нулевого вектора вращения. При вводе этого значения и нажатия кнопки
"Вращение" было выведено предупреждение о неправильном вводе данных,
тем самым исключается возможность вращения пирамиды вокруг нулевого вектора.
Тот же самый результат был получен при оставлении полей координат пустыми.
При проверке на корректность, результаты работы программы удовлетворяют
необходимым требованиям и не отличаются от ожидаемых. Поэтому можно сделать
вывод, что программа работает корректно.
Проверка на
правильность
При работе программы с любыми корректными данными, программа должна
выводить на экран пирамиду в центральной проекции.
Программа тестировалась с различными наборами входных данных. При
тестировании программа выдавала соответствующее изображение.
Во время тестирования тестовый файл был запущен более 100 раз на
различных компьютерах, программа реагировала правильно на все действия
пользователя, результат работы программы соответствовал заявленными
требованиями.
При проверке на правильность, результат не отличался от ожидаемого,
поэтому можно сделать вывод, что программа работает правильно.
Проверка на
надежность
При обработке различных экземпляров данных процент погрешностей и ошибок
не должен превышать допустимого значения. При проведении серии экспериментов
превышение допустимого предела по проценту ошибок и погрешностей не
зафиксировано.
Программа тестировалась в течение двух недель различными пользователями.
В процессе тестирования глобальных сбоев системы обнаружено не было. Все
замечания пользователей были рассмотрены и исправлены в процессе тестирования.
Нарушений в работе операционной системы и параллельных программ не
зафиксировано.
Поскольку в ходе работы программы не было зафиксировано ошибок и
погрешностей, то можно сделать вывод, что программа работает надежно.
Заключение
Целью данной курсовой работы является реализация программного обеспечения
для изображения вращения пирамиды на примере центральной проекции.
В рамках представляемой курсовой работы были исследованы математические
модели построения и вращения пирамиды. На основе исследованных моделей было
разработано программное обеспечение, осуществляющее моделирование и
компьютерную визуализацию вращения пирамиды.
Данное программное обеспечение предназначено для изображения вращения
пирамиды на примере центральной проекции, изучения современных алгоритмов
оптимизации и методов компьютерной графики. Разработанное программное
обеспечение автоматизирует процесс вращения пирамиды и вывода его на экран в
центральной проекции.
Пользователю предоставляется выбор между поворотом фигуры и постоянным
вращением пирамиды на заданный пользователем угол. Для поворота фигуры также
необходимо ввести вектор направления, который должен быть не нулевым. При
отсутствии введенных данных программа "Pyramide" предложит ввести вектор
вращения. Также при вводе неправильных входных данных программа выдает
сообщение об ошибке и пользователю предлагается заново ввести верные данные, а
именно новые координаты вектора вращения, сумма квадратов которых не должна
равняться нулю.
В рамках данной работы помимо задачи компьютерного моделирования и
оптимизации построения пирамиды рассматривалась проблема создания трехмерного
динамического изображения вращения пирамиды. Так же ставилась задача разработки
простого, понятного и удобного пользовательского интерфейса, позволяющего
изменять параметры визуализации и взаимодействовать с программой.
По результатам проведённых испытаний работоспособности программы можно
сказать, что программа работает стабильно и полностью соответствует
поставленной задаче. Данное программное обеспечение ориентировано на студентов
технических специальностей, изучающих дисциплину "компьютерная
графика", может использоваться в учебных и развлекательных целях.
Программное обеспечение разработано в среде Microsoft Visual Studio 2010. Тестирование производилось на компьютерах с
процессорами Intel Core 2 Duo и Intel Core 2 Quad с
установленной операционной системой Windows 7.
Список
использованных источников
1. Блинова, Т.А. Компьютерная графика / Т.А. Блинова,
В.Н. Пореев. - СПб.: КОРОНА принт, 2006 - 520 с.
2. Никулин, Е.А. Компьютерная геометрия и
алгоритмы машинной графики /Е.А. Никулин. - СПб.: БХВ-Петербург, 2003. - 560 с.
3. Шикин, Е.В. Компьютерная графика. Полигональные модели
/Е.В. Шикин, А.В. Боресков. - М.: "ДИАЛОГ-МИФИ", 2000. - 464 с.
4. Гилой, В. Интерактивная машинная графика: Структура
данных, алгоритмы, языки /В. Гилой. - М.: Мир, 1981. - 384 с.
. Ньюмен, У. Основы интерактивной машинной графики /У.
Ньюмен, Р. Спрулл. - М.: Мир, 1976. - 573 с.
. Ласло, М. Вычислительная геометрия и компьютерная
графика на Си++ /М. Ласло. - М.: Бином, 1997.
. Хусаинов, А.А. Интерактивные графические системы.
Теория: учеб. пособие / А.А.Хусаинов , Н.Н. Михайлова. - Комсомольск-на-Амуре:
ГОУВПО "КнАГТУ", 2007. - 132с.
. Демин, А.Ю. Основы компьютерной графики: учебное
пособие / А.Ю. Демин. - Томск, 2011. - 153с.