ПАРАЛЛЕЛЬНАЯ И ЦЕНТРАЛЬНАЯ ПРОЕКЦИИ
Добавил: | DMT |
Дата создания: | 28 июня 2008, 22:41 |
Дата обновления: | 28 июня 2008, 22:42 |
Просмотров: | 21721 последний 7 декабря, 1:38 |
Комментариев: | 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 ) . |