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

1.Платформа .Net

Для каркасной модели необходимо либо использовать функцию

DrawLine(Pen pen, int x1, int y1, int x2, int y2);

для соединения всех вершин сегмента, где структура Pen определяет цвет, ширину и стиль прямой, а (x1, y1) и (x2, y2) координаты ее начала и конца соответственно.

Либо функцию

DrawPolygon(Pen, Point[] points);

Где Point[] points – массив координат вершин полигонов.

Для flat-закраски используется метод

FillPolygon(SolidBrush brush, PointF[] points);

где объект SolidBrush определяет параметры заливки.

Все выше перечисленные методы описаны в библиотеке System.Drawing.

2. Java

Для отрисовки каркасной модели имеется функция

drawPolygon(int[] xPoints, int[] yPoints, int nPoints)

где xPoints[] – массив x-координат вершин полигонов,

yPoints[] – массив y-координат вершин полигонов,

nPoints – число вершин.

Для flat-закраски имеется метод

fillPolygon(int[] xPoints, int[] yPoints, int nPoints).

Все выше описанные методы для данной платформы имеются в библиотеке java.awt.Graphics.

3. Borland

Функция Polygon(Points *, int) – метод класса Canvas предназначена для закраски полигона.

4. WinAPI

Функция Polygon(HDC, Point *, int); где HDC – контекст рисования.

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

{

для всех сегментов поверхности

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

нарисовать многоугольник(вершины сегмента)

иначе

закрасить многоугольник(вершины сегмента)

}

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

Для пунктов структуры решения приведем укрупненные и детализированные алгоритмы. Верх сказал для укрупненного алгоритма использовать индексы, обозначения, циклы, например в геометрическом преобразовании можно заранее обозначить результирующую матрицу.

Укрупненный алгоритм:

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

определить шаг_по_u равный отношению ограничения_по_u к заданному количеству сегментов по_u

определить шаг_по_v равный отношению ограничения_по_v к заданному количеству сегментов по_v

для каждого из заданного диапазона с шагом_по_u

для каждого из заданного диапазона с заданным шагом_по_v

вычислить координаты четырех вершин поверхности

занести в список треугольник1

занести в список треугольник2

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

если изменился какой-либо параметр поверхности

провести этап геометрического моделирования поверхности

если изменился угол поворота

вокруг оси Х

умножить результирующую матрицу на соответствующую матрицу поворота

вокруг оси Y

умножить результирующую матрицу на соответствующую матрицу поворота

вокруг оси Z

умножить результирующую матрицу на соответствующую матрицу поворота

умножить координаты точек поверхности на результирующую матрицу

Определение цвета точек поверхности

Для каждого треугольника из списка треугольников

Вычислить вектор нормали методом Ньюэла

Вычислить косинус между нормалью и направлением к свету

Если косинус 0, то

Определить как внешний цвет треугольника

Иначе

Определить как внутренний цвет

Определить интенсивность равную |косинус|;

Определить RGB-коэффициенты (цвет треугольника)

Переход из 3D в 2D (проецирование)

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

Для каждой точки из списка треугольников

Умножить трехмерные координаты на матрицу проецирования

Занести полученные данные в новый список проецирования

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

для каждого треугольника из списка проецирования

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

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

иначе

нарисовать закрашенный многоугольник(экранные вершины сегмента. цвет закраски)

Детализированный алгоритм

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