Ремонт принтеров, сканнеров, факсов и остальной офисной техники


назад Оглавление вперед




[14]

reject:=Reject Check(outcode1,outcode2); if reject then done:= true else

begin {возможно принятие целиком}

accept:=Accept Check(outcode1,outcode2); if accept then done:=true else

begin { разделить отрезок}

{если P1 внутри, то с помощью SWAP сделать снаружи} if not((outcode1[1])or(outcode1[2])or

(outcode1[3])or(outcode1[4])) then SWAP; { теперь P1 перемещается в точку пересечения} if outcode1[1] then begin {отбросить верхнюю часть}

x1:=x1+(x2-x1)*(ymax-y1)/(y2-y1);

y1:=ymax;

end

else if outcode1[2] then if outcode1[1] then

begin { отбросить нижнюю часть}

x1:=x1+(x2-x1)*(ymin-y1)/(y2-y1);

y1:=ymin;

end

else if outcode1[3] then

begin { отбросить правую часть}

y1:=x1+(y2-y1)*(ymax-x1)/(x2-x1);

x1:=xmax;

end

else if outcode1[4] then

begin { отбросить левую часть}

y1:=x1+(y2-y1)*(ymin-x1)/(x2-x1);

x1:=xmin; end; end; end; until done;

if accept then Line(x1,y1,x2,y2); { нарисовать отрезок} end;{procedure}


Нормирующие преобразования видимого объема

Зададим центральную перспективную проекцию с центром проекции в начале координат, как показано на рис. 31. Для реальных вычислений необходимо также определить значения минимальной и максимальной отсекающих плоскостей по координате z: z = z min и z = z max, соответственно.

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

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

Рис 31. Видимый объем, вид сбоку.


виду, в котором вычисления проводились бы значительно проще. В общем идея заключается в том, чтобы свести преобразование центральной перспективы математически к виду параллельной проекции, в которой, очевидно, операция взятия проекции сводится к простому отбрасыванию у точек координаты z.

Будем решать задачу в два этапа. В начале приведем видимый объем к нормированному виду. При этом значение zmax = 1, а границы по осям х и

у лежат в диапазоне [-1,1], как показано на рис. 32.

Нормирующим преобразованием в этом случае будет операция масштабирования, которая для произвольной точки X выражается в виде:

x = xs( Ух Л/y ,V J,

V/ max / max / maxJ

к

D

J\

в\

\.

z=l \ С

Рис. 32. Нормированный видимый объем.

Xmax azmax хэкрzmax уэкр

где= х х =--, и соответственно, уэкр =--.

zaa

max

Нормированный видимый объем позволяет с большей легкостью решать задачу отсечения по границе. А именно, в этом случае может применяться модифицированный вариант алгоритма Коэна-Сазарленда в котором вместо 4-битовых используются 6-битовые коды вне/внутри для описания нахождения точки в соответствующей области пространства. Уравнения боковых граней видимого объема сильно упрощаются, например, для правой отсекающей плоскости уравнение запишется z = х, а для левой боковой z = -х и т.д. . Тогда для некоторой точки (х, у, z) условие

установления бита в единицу будет следующим:



[стр.Начало] [стр.1] [стр.2] [стр.3] [стр.4] [стр.5] [стр.6] [стр.7] [стр.8] [стр.9] [стр.10] [стр.11] [стр.12] [стр.13] [стр.14] [стр.15] [стр.16] [стр.17] [стр.18] [стр.19]