ПАРАЛЛЕЛЬНАЯ И ЦЕНТРАЛЬНАЯ ПРОЕКЦИИ


Добавил:DMT
Дата создания:28 июня 2008, 22:41
Дата обновления:28 июня 2008, 22:42
Просмотров:21512 последний сегодня, 11:05
Комментариев: 0

ПАРАЛЛЕЛЬНАЯ И ЦЕНТРАЛЬНАЯ ПРОЕКЦИИ

Для изображения лежащих в трехмерном пространстве объектов координаты точек (мировые координаты) преобразуются сначала в координаты в пространстве изображения, а затем – в экранные.

Для произвольных трехмерных векторов a , b и c через (a,b,c) обозначим смешанное произведение. Скалярное произведение векторов будем обозначать через a ?  b , векторное – через a ? b . Пусть наблюдатель находится в точке (x V ,y V ,z V ) . Центральной проекцией произвольной точки (x,y,z) называется точка пересечения плоскости проекции и луча, соединяющего точку (x V ,y V ,z V ) наблюдения с точкой (x,y,z) . Параллельная проекция получается из центральной, если точку наблюдения бесконечно удалить в некотором направлении.

Рассмотрим, например, шар в трехмерном пространстве. Соединяя точку наблюдения (x V ,y V ,z V ) с каждой точкой шара, мы получим круговой конус. Так как пересечение произвольной плоскости с конусом является эллипсом, то центральной проекцией шара будет эллипс, превращающийся в круг только в тех случаях, когда плоскость проекции перпендикулярна прямой, проходящей через точку наблюдения и центр шара.

Опишем формулы преобразования координат при параллельной и центральной проекции.

Параллельная проекция. Пусть задана декартова система координат (x,y,z) . Рассмотрим произвольную плоскость P , проходящую через некоторую точку (x 0 ,y 0 ,z 0 ) , радиус-вектор которой равен r 0 , параллельно векторам u 1 и u 2 (рис.) .

Пусть u – произвольный вектор. Тогда для каждой точки r трехмерного пространства существует единственная тройка (x',y',z') вещественных чисел такая, что r=r 0 +x'u 1 +y'u 2 +z'u .

Пару чисел (x',y') мы будем называть координатами параллельной проекции точки (x,y,z) на плоскость P вдоль направления u , или параллельной проекцией на плоскость P параллельно вектору u (рис) .

Чтобы найти x' , y' и z' , умножим обе части равенства

r-r 0 =x'u 1 +y'u 2 +z'u скалярно на векторы, выбранные таким образом, что в правой части остается лишь один ненулевой член. Умножая на u 1 ?  u , приходим к равенству (r-r 0 ,u 1 ,u) = y'(u 2 ,u 1 ,u) . Умножая на u 2 ?  u , получим

(r-r 0 ,u 2 ,u) = x'(u 1 ,u 2 ,u) .

Наконец, скалярное произведение на u 1 ?  u 2 приводит к равенству

(r–r 0 ,u 1 ,u 2 ) = z'(u,u 1 ,u 2 ) .

Отсюда вытекает, что координаты (x',y') проекции вдоль направления u на плоскость P можно вычислить с помощью формул

x'=(r-r 0 ,u 2 ,u)/(u 1 ,u 2 ,u) ,

y'=-(r-r 0 ,u 1 ,u)/(u 1 ,u 2 ,u) .

При применении алгоритмов удаления невидимых линий необходимо знать координату, характеризующую степень удаленности точки от плоскости P . Согласно выкладкам, эта координата равна z'=(r-r 0 ,u 1 ,u 2 )/(u 1 ,u 2 ,u) .

Пример 3.1. Рассмотрим параллельную проекцию трехмерного пространства на плоскость Oyz в направлении вектора u=(1,0.7,0.7) . Плоскость Oyz можно задать векторами u 1 =(0,1,0) , u 2 =(0,0,1) .

Смешанное произведение (u 1 ,u 2 ,u) равно 1 . Поэтому

, ,

отсюда находим x'=-0.7x+y , y'=-0.7x+z .

Пример 3.2. Рассмотрим ортогональную проекцию на плоскость, проходящую через начало координат, заданную единичным вектором нормали n . В этом случае u=n . Вектор u 1 , обычно, (например, в архитектуре или в военном деле) берут лежащим в горизонтальной плоскости Oxy . Этот вектор должен быть ортогонален вектору u , поэтому при u 1 ={ x , h ,0} выполнено соотношение x  u x + h  u y =0 . Решая это уравнение получаем u 1 , а затем u 2 :

u 1 ={-u y /sqrt(u x 2 + u y 2 ), u x /sqrt(u x 2 +u y 2 ), 0} ,

u 2 ={-u x u z , -u y u z , u x 2 +u y 2 }/sqrt(u x 2 +u y 2 ) .

Центральная проекция . Пусть задана плоскость с началом координат r 0 и базисными векторами u 1 и u 2 (рис.). Требуется изобразить на плоскости проекцию точки r=(x,y,z) из точки наблюдения r V . Пусть (x',y') – искомые координаты. Тогда для некоторого l I R выполнено равенство r 0 +x'u 1 +y'u 2 =r V + l (r-r V ) .

Координаты x' , y' будут вычисляться по формулам

x'=(r V -r 0 , u 2 , r-r V )/(u 1 , u 2 , r-r V ) ,

y'=(r V -r 0 , u 1 , r-r V )/(u 1 , u 2 , r-r V ).

Число l характеризует дальность точки r , в частности при l <1 точка r лежит перед плоскостью, а при l >1 – за плоскостью проекции,

l =-(r V -r 0 , u 1 ,u 2 )/(u 1 , u 2 , r-r V )

(ближе всех лежат точки, для которых l =0 ).

Если (u 1 , u 2 , r V -r 0 )>0 , то в качестве третьей координаты z' , чтобы система координат (x',y',z') была правой, берется значение z'=- l . Поскольку l  > 0 , для всех лежащих в поле зрения наблюдателя точек r , то координата z' будет меньше нуля.

Укажем теперь, как можно получить центральную проекцию из параллельной. Пусть u – произвольный вектор, коллинеарный вектору r V  -r 0 . Тогда существует число d такое, что r V  –r 0 =du . Рассмотрим проекцию, параллельную вектору u , на плоскость, заданную векторами r 0 u 1 и u 2 . Предположим, что координаты параллельной проекции точки (x,y,z) вдоль вектора u равны (x",y",z") . Тогда

x"=(r-r 0 , u 2 , u)/(u 1 , u 2 , u),

y"=-(r-r 0 , u 1 , u)/(u 1 , u 2 , u),

z"=(r-r 0 , u 1 , u 2 )/(u 1 , u 2 , u).

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

x'=x"d/(d-z") , y'=y"d/(d-z") , z'=- l =d/(d-z") ,

справедливость которых легко проверить аналогично, исходя из геометрических соображений.

При применении алгоритмов удаления невидимых линий полагают, что ось z' перпендикулярна плоскости (x',y') , а числа x' и y' служат координатами проекции.

Обычно вектор r 0 выбирают так, чтобы прямая, соединяющая точку r V с точкой r 0 , была перпендикулярна плоскости проекции (рис.) . В этом случае r V -r 0 =du , где u=u 1 ? u 2 , а d – расстояние от точки r V до плоскости, поэтому

x'=-d(r-r 0 ) ?   u 1  / ((r-r 0 ) ?  u - d) ;

y'=-d(r-r 0 ) ?  u 2  / ((r-r 0 ) ?  u - d) ;

z'=- l =d/((r-r 0 ) ?  u - d) .

Пример 3.3. Пусть ось Oz параллельна плоскости проекции. Положим u 2 =(0,0,1) . Рассмотрим единичный вектор u 1 , перпендикулярный вектору u 2 , лежащий в плоскости проекции. Положим u=u 1 ? u 2 . Выберем так вектор r 0 , чтобы вектор r 0 -r V был перпендикулярен плоскости проекции. Тогда r 0 =r V -d(u 1 ? u 2 ) , где d – расстояние от точки наблюдения до плоскости проекции. Вектор u лежит в плоскости Oxy , поэтому существует некоторый угол a такой, что u=(cos a , sin a , 0) . Выберем третьим вектор u 1 =(-sin a , cos a , 0) , этот вектор перпендикулярен векторам u 2 и u , и имеет единичную длину.

Если предположить, что координаты точки наблюдения равны (x V ,y V ,z V ) , то координаты центральной проекции точки (x,y,z) будут вычисляться по формулам

x'=-d((x-x V )(-sin a )+(y-y V )cos a )/((x-x V )cos a +(y-y V )sin a ) ;

y'=-d(z-z V )/((x-x V )cos a +(y-y V )sin a ) ;

z'=- l =d/((x-x V )cos a +(y-y V )sin a ) .

up