3.1. Параллельная и центральная проекции

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

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

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

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

Параллельная проекция. Пусть задана декартова система координат (x,y,z). Рассмотрим произвольную плоскость P, проходящую через некоторую точку (x0,y0,z0), радиус-вектор которой равен r0, параллельно векторам u1 и u2 (рис. 16) /15/.

Рис. 16. Плоская параллельная проекция

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

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

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

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

(r-r0,u2,u)=x‘(u1,u2,u).

Наконец, скалярное произведение на u1´u2 приводит к равенству

(r–r0,u1,u2)=z'(u,u1,u2).

Рис. 17. Параллельная проекция

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

x’=(r-r0,u2,u)/(u1,u2,u),

y’=-(r-r0,u1,u)/(u1,u2,u).

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

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

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

,                       ,

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

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

u1={-uy/sqrt(ux2+ uy2),ux/sqrt(ux2+uy2),0},

u2={-uxuz,-uyuz,ux2+uy2}/sqrt(ux2+uy2).

Центральная проекция. Пусть задана плоскость с началом координат r0 и базисными векторами u1 и u2 (рис. 18) /15/. Требуется изобразить на плоскости проекцию точки r=(x,y,z) из точки наблюдения rV. Пусть (x’,y’) – искомые координаты. Тогда для некоторого lIR выполнено равенство r0+x’u1+y’u2=rV+l(r-rV).

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

x’=(rV-r0,u2,r-rV)/(u1,u2,r-rV),

y’= — (rV -r0,u1,r-rV)/(u1,u2,r-rV).

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

l=-(rV -r0,u1,u2)/(u1,u2,r-rV )

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


Рис. 18. Центральная проекция

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

Укажем теперь, как можно получить центральную проекцию из параллельной. Пусть u – произвольный вектор, коллинеарный вектору rV-r0. Тогда существует число d такое, что rV–r0=du. Рассмотрим проекцию, параллельную вектору u, на плоскость, заданную векторами r0,u1 и u2. Предположим, что координаты параллельной проекции точки (x,y,z) вдоль вектора u равны (x»,y»,z»). Тогда

x»=(r-r0,u2,u)/(u1,u2,u),

y«=-(r-r0,u1,u)/(u1,u2,u),

z«=(r-r0,u1,u2)/(u1,u2,u).

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

x’=x»d/(d-z»), y’=y»d/(d-z»), z’=-l=d/(d-z»),

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

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

Обычно вектор r0 выбирают так, чтобы прямая, соединяющая точку rV с точкой r0, была перпендикулярна плоскости проекции (рис. 19) /15/. В этом случае rV-r0=du, где u=u1´u2, а d – расстояние от точки rV до плоскости, поэтому

x’=-d(r-r0)×u1/((r-r0)×u-d);

y’=-d(r-r0) ×u2/((r-r0) ×u-d);

z‘=-l=d/((r-r0) ×u-d).

Пример 3.3. Пусть ось Oz параллельна плоскости проекции. Положим u2=(0,0,1). Рассмотрим единичный вектор u1, перпендикулярный вектору u2, лежащий в плоскости проекции. Положим u=u1´u2. Выберем так вектор r0, чтобы вектор r0-rV был перпендикулярен плоскости проекции. Тогда r0=rV-d(u1´u2), где d – расстояние от точки наблюдения до плоскости проекции. Вектор u лежит в плоскости Oxy, поэтому существует некоторый угол a такой, что u=(cosa,sina,0). Выберем третьим вектор u1=(-sina,cosa,0), этот вектор перпендикулярен векторам u2 и u, и имеет единичную длину.

Рис. 19. Центральная проекция

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

x’=-d((x-xV)(-sina)+(y-yV)cosa)/((x-xV)cosa+(y-yV)sina);

y’=-d(z-zV)/((x-xV)cosa+(y-yV)sina);

z’=-l=d/((x-xV)cosa+(y-yV)sina).