Геометрические модели
Важной составной частью геометрических моделей является описание поверхностей. Если поверхности детали – плоские грани, то модель может быть выражена достаточно просто определенной информацией о гранях, ребрах, вершинах детали. При этом обычно используется метод конструктивной геометрии. Представление с помощью плоских граней имеет место и в случае более сложных поверхностей, если эти поверхности аппроксимировать множеством плоских участков – полигональной сеткой. Тогда поверхностную модель можно задать одной из следующих форм:
модель есть список граней, каждая грань представлена упорядоченным списком вершин (циклом вершин). Эта форма характеризуется значительной избыточностью, т.к. каждая вершина повторяется в нескольких списках;
модель есть список ребер, для каждого ребра заданы инцидентные вершины и грани.
Каждая из вышеописанных моделей имеет недостатки:
аппроксимация при больших размерах полигональной сетки дает заметные искажения формы;
аппроксимация при малых размерах сетки требует значительных затрат вычислительных ресурсов.
Поэтому для неплоских поверхностей чаще применяют описания в форме Безье или В-сплайнов. Суть таких моделей в том, что сегменты аппроксимируемой кривой описываются кубическими уравнениями:
![]()
(1)
![]()
где
![]()
- параметр (это параметрическое задание
кривой).
Неизвестные
коэффициенты
определяются из условий сопряжения
сегментов. В случае кривых Безье этими
условиями является прохождение кривой
сегмента через 2 заданные концевые точки
и равенство в этих точках касательных
векторов соседних сегментов. В случае
В-сплайнов выполняются условия
непрерывности касательного вектора и
кривизны (т.е. первой и второй производных)
в двух концевых точках, что обеспечивает
высокую степень гладкости кривой, хотя
прохождение кривой через заданные точки
здесь не гарантируется.
Ниже на рисунке
представлена кривая Безье с концевыми
точками
и
,
точки
и
лежат на касательных к кривой в концевых
точках.


Для
формы Безье получаются следующие
![]()
уравнения:
![]()
(2)
![]()
![]()
Здесь
=(
вектор-строка, матрица М представлена
в таблице 1,
- векторы координатx,
y
и z
точек
,
,
и
.
Следует отметить, что в случае В-сплайнов выбирают другие точки для аппроксимации, но участок кривой между выбранными точками представляется уравнениями, аналогичными формы Безье (2), только матрица М имеет несколько иной вид, представленный таблицей 2.
Таблица 1 Таблица 2
|
1 |
3 |
-3 |
1 |
|
-1/6 |
1/2 |
-1/2 |
1/6 |
|
3 |
-6 |
3 |
0 |
|
1/2 |
-1 |
1/2 |
0 |
|
-3 |
3 |
0 |
0 |
|
-1/2 |
0 |
1/2 |
0 |
|
1 |
0 |
0 |
0 |
|
1/6 |
2/3 |
1/6 |
0 |
Над геометрическими моделями выполняются такие операции, как преобразования графических объектов, представлений линий в растровой форме, выделение окон, удаление скрытых линий, проецирования, закраски изображений.
Преобразования графических объектов представляются в единой матричной форме
, (3)
где Т - преобразующая матрица, Р - старое положение точки, С - новое положение точки, причем указание положения имеет следующую особенность: кроме координат точки в векторах-строках С и Р указывается масштабный множитель W. Например, перенос точки для двумерного представления будет выражаться в виде (3) и матрица Т задается таблицей 3, а операция масштабирования – тем же выражением (3) с матрицей М, заданной таблицей 4. Операция поворота задается таблицей 5.
Таблица 3 Таблица 4 Таблица 5
|
1 |
0 |
0 |
|
|
0 |
0 |
|
|
|
0 |
|
0 |
1 |
0 |
|
0 |
|
0 |
|
- |
|
0 |
|
|
|
1 |
|
0 |
0 |
1 |
|
0 |
0 |
1 |
Удобство формулы 3 в том, что ею можно описать не только одиночное преобразование, но и любую комбинацию элементарных преобразований, например, для сдвига с одновременным поворотом справедливо:
,
где T=![]()
,
-
матрица сдвига,
- матрица поворота.
Представление графических элементов в растровой форме требуется для отображения этих элементов на битовую карту растровой видеосистемы.
Пусть требуется развернуть отрезок АВ прямой y=ax+b. Обозначим А=(xa,ya), B=(xb,yb). За величину дискрета (пиксела) примем 1. В алгоритме развертки номера строк и столбцов карты, на пересечении которых должны находиться точки отрезка, определяются следующим образом:
1)
х:=xb-xa;
y:=yb-ya;
x:=xa;
y:=ya;
2)
d:=2*
y-
x;
3) если
,
то {y:=y+1;
d:=d+2*(
y-
x)};
иначе d:=d+2*
y;
4) x:=x+1;
5) переход к пункту 3, пока не достигнута точка В.
Экономичность этого алгоритма обусловлена отсутствием длинных арифметических операций умножения (увеличение в 2 раза выполняется путем сдвига влево на 1 бит).
Выделение окна требуется при определении той части изображения, которая должна быть выведена на экран дисплея. Пусть окно ограничено линиями x=x1, x=x2, y=y1, y=y2 и требуется отобразить многоугольник ABCD (рис. 2).



Е
B
y1 G H

A
C
D F
y2

x1 x2
Рисунок 2.
Поочередно для каждого многоугольника проверяется расположение его вершин и ребер относительно границ окна. Так, для многоугольника ABCDпри отсечении по границе х=х2 просматривается множество вершин в порядке обхода по часовой стрелке. Возможны следующие ситуации для двух последовательных вершинpиr:
1) Xp>x2 иXr>x2 – означает, что обе вершины и инцидентное им ребро находятся вне окна и исключаются из дальнейшего анализа;
2)
,
что означает, что обе вершины и инцидентное
им ребро остаются для дальнейшего
анализа;
3)
,
вершинаростается в списке вершин
для отображения, а вершинаrзаменяется новой вершиной с координатамиx=x2,y=Yp+(Yr-Yp)*(x2-Xp)/(Xr-Xp)
(в нашем примере это будет вершина Е
вместо В);
4)
,
то вершинарзаменяется новой
вершиной с координатамиx=x2,y=Yr+(Yp-Yr)*(x2-Xr)/(Xp-Xr),
а вершинаrостается
в списке вершин, в нашем примере новой
вершиной будетFвместо
С.
После окончания просмотра применительно ко всем границам в окне оказываются оставшиеся в списке вершины. Применительно к нашему примеру после отсечения по правой границе х=х2 и по верхней границе y=y1 получаем многоугольникAGFD. Однако правильным результатом является многоугольникAGHFD. Этот правильный результат мы получим при двойном обходе вершин сначала по часовой стрелке, затем – против часовой стрелки. В результирующий список вершин необходимо включать все новые вершины, появляющиеся при обходах.
Для удаления скрытых линийприменяют разные алгоритмы, среди которых чаще всего в ПО ГМиМГ реализуется алгоритмz-буфера.Z-буфер – это область памяти, в которой число ячеек равно числу пикселов в окне вывода. Предполагается, что осьzнаправлена по нормали к видовой поверхности и наблюдатель расположен в точкеz=0. Для каждой точки плоскости окна (x,y) определяются координатыzвсех граней, проходящих над этой точкой. В ячейкуSz-буфера заносится точка с наименьшим значением координатыz. После применения алгоритма ко всей плоскости окнаz-буфер будет содержать пикселы граней, наиболее близких к наблюдателю.
Алгоритмы построения проекцийпреобразуют трехмерные изображения в двумерные. Обычно эти преобразования связаны с пересчетом координатx,y, поворотами изображения и удалением скрытых линий.
Закраска матовых поверхностейоснована на законе Ламберта, согласно которому яркость отраженного от поверхности света пропорциональна косинусу угла между нормалью к поверхности и направлением луча падающего света. В ПО МГиГМ реализуются несколько алгоритмов закраски, основанных на определении яркости внутренних точек путем линейной интерполяции яркости либо в вершинах многоугольника, либо по векторам нормалей к поверхности.
