Смекни!
smekni.com

Построение графических примитивов Математические модели поверхностей и объектов (стр. 2 из 2)

(рис. 2)

Не все отрезки проходят через точки растра. Подобная ситуация иллюстрируется на рис. 3, где отрезок с тангенсом угла наклона 3/8 сначала проходит через точку растра (0, 0) и последовательно пересекает три пикселя. Также иллюстрируется вычисление ошибки при представлении отрезка дискретными пикселями. Так как желательно проверять только знак ошибки, то она первоначально устанавливается равной -1/2. Таким образом, если угловой коэффициент отрезка больше или равен 1/2, то величина ошибки в следующей точке растра с координатами (1, 0) может быть вычислена как

e = e + m,

где m — угловой коэффициент. В нашем случае при начальном значении ошибки -1/2 e = -1/2 + 3/8 = -1/8.

(рис. 3)

Так как e отрицательно, отрезок пройдет ниже середины пикселя. Следовательно, пиксель на том же самом горизонтальном уровне лучше аппроксимирует положение отрезка, поэтому у не увеличивается. Аналогично вычисляем ошибку e = -1/8 + 3/8 = 1/4 в следующей точке растра (2, 0). Теперь e положительно, а значит, отрезок пройдет выше средней точки. Растровый элемент (2, 1) со следующей по величине координатой y лучше аппроксимирует положение отрезка. Следовательно, y увеличивается на единицу. Прежде чем рассматривать следующий пиксель, необходимо откорректировать ошибку вычитанием из нее единицы. Имеем e = 1/4 - 1 = -3/4.

Заметим, что пересечение вертикальной прямой x = 2 с заданным отрезком лежит на 1/4 ниже прямой y = 1. Если же перенести отрезок 1/2 вниз, мы получим как раз величину -3/4. Продолжение вычислений для следующего пикселя дает e = -3/4 + 3/8 = -3/8.

Так как e отрицательно, то y не увеличивается. Из всего сказанного следует, что ошибка — это интервал, отсекаемый по оси y рассматриваемым отрезком в каждом растровом элементе (относительно -1/2).

В общем случае чтобы обрабатывать отрезки во всех октантах. Необходимо учитывать в алгоритме номер квадранта, в котором лежит отрезок и его угловой коэффициент. Когда абсолютная величина углового коэффициента больше 1, y постоянно изменяется на единицу, а критерий ошибки Брезенхема используется для принятия решения об изменении величины x. Выбор постоянно изменяющейся (на +1 или -1) координаты зависит от квадранта.

(рис. 4)

Функция –Sign возвращает -1, 0, 1 для отрицательного, нулевого и положительного аргумента соответственно, предназначена для того чтобы учитывать номер квадранта.

Функция Line аппроксимирует отрезок с начальными координатами X1, Y1 и конечными координатами X2, Y2 по общему алгоритму Брезенхема.

Функция Triang объединяет три матрицы с координатами точек каждой стороны треугольника.

Далее выводим средствами Mathcad результат работы функции Triang для заданных координат вершин треугольника:


Построение додекаэдра

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

Икосаэдр конструируется по следующему алгоритму.

(рис. 5)

В окружностях сечений

цилиндра единичного радиуса
строятся правильные пятиугольники 1-3-5-7-9-1 и 2-4-6-8-10-2 с координатами вершин xi=cos(36°i), zi=sin(36°i), yi=(-1)i+1h при i=1..10.

Соединяя вершины 1-2-3-4-5-6-7-8-9-10-1, получим десять средних треугольных граней икосаэдра с длиной горизонтальных ребер

Так как у нас нет смещения по х и по у то

и
, а
поэтому получим

Из условия получения равносторонних треугольников. Найдем высоту h, для этого распишем длину ребер d через координаты 1 и 10 вершины.

Так как

то получим

Вычислим радиус описанной сферы

(рис. 6)

Функция K формирует матрицу координат вершин икосаэдра.

Q – матрица координат вершин икосаэдра.

G - матрица номеров вершин образующих одну грань икосаэдра.

Функция VV формирует матрицу координат вершин додекаэдра. Для этого из матрицы Q берем координатные столбцы вершин, образующих одну грань, усредняем их и получаем соответствующий координатный столбец матрицы Q12.


Q12– матрица координат вершин додекаэдра.

В матрицы G12 задаем обход додекаэдра (рис. 7) для прорисовки.

(рис. 7)

Результатом работы функции V(Q, G) является блочная матрица, элементы которой содержат соответственно только координаты X, Y и Z начальных и конечных вершин всех ребер, входящих в матрицу G12.

Далее средствами Mathcad по результатам работы функции V(Q12,G12) строим график поверхности додекаэдра:


Заключение

В данной курсовой работе я разработал и реализовал с помощью процедур и функций встроенного языка системы MathCAD программу на основе алгоритма Брезенхема, обеспечивающую генерацию стандартных графических примитивов в соответствии с вариантом задания, а именно генерацию треугольника. Также я разработал алгоритм построения модели додекаэдра. Успешно построил его по разработанному алгоритму с использованием системы программирования MathCAD. Тем самым закрепил, углубил и расширил теоретические знания в области методов моделирования объектов, укрепил свои практические умения и навыки программной реализации методов.