Геометрические модели
Важной составной частью геометрических моделей является описание поверхностей. Если поверхности детали – плоские грани, то модель может быть выражена достаточно просто определенной информацией о гранях, ребрах, вершинах детали. При этом обычно используется метод конструктивной геометрии. Представление с помощью плоских граней имеет место и в случае более сложных поверхностей, если эти поверхности аппроксимировать множеством плоских участков – полигональной сеткой. Тогда поверхностную модель можно задать одной из следующих форм:
модель есть список граней, каждая грань представлена упорядоченным списком вершин (циклом вершин). Эта форма характеризуется значительной избыточностью, т.к. каждая вершина повторяется в нескольких списках;
модель есть список ребер, для каждого ребра заданы инцидентные вершины и грани.
Каждая из вышеописанных моделей имеет недостатки:
аппроксимация при больших размерах полигональной сетки дает заметные искажения формы;
аппроксимация при малых размерах сетки требует значительных затрат вычислительных ресурсов.
Поэтому для неплоских поверхностей чаще применяют описания в форме Безье или В-сплайнов. Суть таких моделей в том, что сегменты аппроксимируемой кривой описываются кубическими уравнениями:
(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, поворотами изображения и удалением скрытых линий.
Закраска матовых поверхностейоснована на законе Ламберта, согласно которому яркость отраженного от поверхности света пропорциональна косинусу угла между нормалью к поверхности и направлением луча падающего света. В ПО МГиГМ реализуются несколько алгоритмов закраски, основанных на определении яркости внутренних точек путем линейной интерполяции яркости либо в вершинах многоугольника, либо по векторам нормалей к поверхности.