Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Пояснительная записка по ИГС лаба№1.docx
Скачиваний:
13
Добавлен:
26.11.2018
Размер:
324.41 Кб
Скачать

Моделирование поверхности в исходном положении

алг Полигональное моделирование

уравнение_поверхности(u, v);

шагов_по_U;

шагов_по_V;

ограничение_по_U;

ограничение_по_V;

нач

P[шагов_по_U][шагов_по_V];

шаг_по_U=ограничение_по_u/шагов_по_U;

шаг_по_V=ограничение_по_V/шагов_по_V;

U=0; V=0;

цикл i от 0 до шаг_по_U

нц

цикл j от 0 до шаг_по_V

нц

P[i][j]=уравнение_плоскости(U, V);

V=V+шаг_по_V;

кц

U=U+шаг_по_U;

кц

Сформировать_полигоны(P);

кон

алг Сформировать_полигоны(P[n][m])

нач

цикл i от 0 до n

нц

цикл j от 0 до m

нц

треугольник1=создать_ треугольник (P[i][j], P[i+1][j], P[i][j+1]);

список_ треугольников.Добавить(треугольник1);

полигон2=создать_ треугольник (P[i+1][j+1],P[i+1][j],P[i][j+1])

список_ треугольников.Добавить(треугольник2);

кц

кц

кон

Геометрические преобразования

алг

нач

если поворот вокруг оси Ox

вычисляем матрицу поворота Rx;

результирующая матрица (Result) = Result * Rx;

иначе

если поворот вокруг оси Oy

вычисляем матрицу поворота Ry;

Result = Result * Ry;

иначе

если поворот вокруг оси Oz

вычисляем матрицу поворота Rz;

Result = Result * Rz;

если изменится параметр

Вызывается метод Rebuild перепостроения поверхности

цикл от 0 до количества треугольников

нц

треугольник [i].A = треугольник [i].A * Result;

треугольник [i].B = треугольник [i].B * Result;

треугольник [i].C = треугольник [i].C * Result;

кц

кон

Определение цвета сегмента поверхности

алг Определить цвета треугольников (сегментов)

N; //количество треугольников

нач

цикл i от 0 до N

нц

нормаль=метод_Ньюэлла(треугольник[i].точки);

косинус=вычислить_косинус_угла(нормаль, [0 0 1 0]);

если косинус>0

сегмент[i].цвет=внешний цвет;

иначе

сегмент[i].цвет=внутренний цвет;

интенсивность=|косинус|;

треугольник[i].цвет.R= треугольник[i].цвет.R*интенсивность;

треугольник[i].цвет.G= треугольник[i].цвет.G*интенсивность;

треугольник[i].цвет.B= треугольник[i].цвет.B*интенсивность;

кц

кон

Проецирование

алг Проецирование

нач

Вычисляем матрицу проецирования

цикл i от 0 до N

{

треугольник [i].A = треугольник [i].A * Матрица проецирования;

треугольник [i].B = треугольник [i].B * Матрица проецирования;

треугольник [i].C = треугольник [i].C * Матрица проецирования;

кон

Визуализация

алг Визуализация

нач

цикл i от 0 до Количество_ треугольников

если способ визуализации==Каркас

нарисовать треугольник(экранные координаты вершин треугольника, цвет рисования);

иначе

закрасить треугольник(экранные координаты вершин треугольника, цвет закраски треугольника);

кон

Описание программного обеспечения (руководство программиста)

Приложение было написано в среде Visual Studio 2008 на языке программирования C# с использованием библиотек .Net Framework 2.0

В программе при перемещении ползунка xTrackBar осуществляется поворот фигуры вокруг оси х, при этом используются следующие основные функции и методы: класс Library функции XRotateMatrix(), YRotateMatrix(), ZRotateMatrix(), OrthogonalProj_XOY – матрицы поворота вокруг осей х у z и матрица проецирования соответственно, они, в свою очередь, используются в классе GraphicsHelper в функции Rotate()-выполняющая геометрические преобразования, и в ProjectXY() этого же класса, которые используются в классе Poligon в функции Calculate()-выполняющая геометрические преобразования точек вершин полигона и считающая их экранные координаты, то есть совершает этап проецирования и поворота. Также используется функция Draw()-рисования.

При перемещении ползунка yTrackBar и zTrackBar осуществляется поворот фигуры вокруг осей y и z соответственно. Функции и методы те же, что и при повороте вокруг оси х.

При перемещении ползунков LimitTrackBar1, LimitTrackBar2, SegmentTrackBar1, SegmentTrackBar2, paramLabel1, paramLabel2 осуществляется изменение параметров поверхности при этом вызывается функция Rebuild()-метод, выполняющий перепостроение поверхности на основании ее новых параметров. Она содержит функцию FromArgb()-функция определение цвета по RGB, функцию Figura(Equations.Helicoid, outer, inner) - принимает в качестве параметра массив точек поверхности, и выполняет построение полигонов на этих точках- класса Figure, где функция Helicoid() класса Equations инкапсулирует параметрическое уравнение поверхности «Геликоид», а outer и inner соответственно определяют внешний и внутренний цвет, который отображается в Color1PictureBox и Color2PictureBox. Также как и при поворотах вызывается функция Calculate() - выполняющая геометрические преобразования точек вершин полигона и считающая их экранные координаты. Вызывается функция Draw()-рисования, причем в ней содержатся следующие функции класса Figure – Stroke() и Fill(),где Stroke() - метод, выполняющий визуализацию каркаса поверхности, если нажат StructureRadioButton, если же выбран FlatRadioButton, то вызов Fill() - метод, выполняющий визуализацию поверхности, при этом выполняется заполнение полигонов с использованием flat-сглаживания. В Stroke() находится DrawPolygon(m_StrokePen, ScreenPoints)-эта функция рисует многоугольник, определяемый массивом структур определенным цветом (в нашем случае черным). В Fill() находится функции класса Poligon: CalculateColor() и FillPolygon(). CalculateColor() - метод, выполняющий вычисление цвета закраски полигона, в нем есть следующие функции класса Library: NewellMethod() - функция, считающая нормаль сегмента, ScalarMult() - функция, считающая скалярное произведение двух векторов, VectorLen()-функция, вычисляющая длину вектора, последние две функции необходимы для подсчета косинуса.

Диаграмма классов разработанного приложения выглядит следующим образом:

Класс точка Point3D

X

Y

Z

Point3D

Класс Figure

m_Polygons

InnerColor

OuterColor

Calculate

1

Figure

Fill

Stroke

Класс Library

NewellMethod

OrthogonalProj_XOY

ScalarMult

VectorLen

XRotateMatrix

YRotateMatrix

ZRotateMatrix


Класс Equation

double u;

double v;

limit1

limit2

u_count

v_count

Helicoid()

Класс Poligon

Points

ScreenPoints

Calculate

CalculateColor

Fill

Polygon

Stroke


КлассGraphicsHelper

BaseMatrix

CalculateScreen

Позунковые переключатели

4

ProjectXY

Rotate

2

TTrackBar *Color1RTrackBar Color1GTrackBar Color1BTrackBar

Color2RTrackBar Color2GTrackBar

Color2BTrackBar XTrackBar YTrackBar ZTrackBar LimitTrackBar1 LimitTrackBar2

SegmentTrackBar1 ParamTrackBar1 SegmentTrackBar2 ParamTrackBar2


Метки

3

TLabel *Xlabel Ylabel Zlabel Limitlabel1 Limitlabel2 segmentlabel1 segmentlabel2

paramlabel1 paramlabel1

Класс MainForm

ChangeColor

DegreeToRadian

Draw()

FigureChanged

Rebuild()


5

Взаимозависимые переключатели

TRadoiButton *structureRadoiButton flatRadoiButton


TGroupBox *GroupBox1 GroupBox2 GroupBox3 GroupBox4 GroupBox5 GroupBox6

поле вывода изображения

PictureBox * Color1PictureBox Color2PictureBox PictureBox1

TButton *ButtonClose


Кнопка «Выход»