RU: Projection

Отображение графических объектов

Построение проекции

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

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

Ортогональная проекция

Самой простой из параллельных проекций является ортогональная проекция на одну из координатных плоскостей $x=0$, $y = 0$ или $z = 0$. Эти проекции используются обычно в инженерных чертежах. Чтобы получить проекцию на плоскость $x=0$, нужно $x$-овую координату точек положить равной нулю. Аналогично получаются проекции на другие координатные плоскости. Их можно рассматривать как линейные преобразования $\mathcal{P}_x$, $\mathcal{P}_y$, $\mathcal{P}_z$ с матрицами

(1)
\begin{align} \mathcal{P}_x= \begin{pmatrix} 0 & 0 & 0 \\ 0 & 1 & 0 \\ 0 & 0 & 1 \end{pmatrix}, \qquad \mathcal{P}_y= \begin{pmatrix} 1 & 0 & 0 \\ 0 & 0 & 0 \\ 0 & 0 & 1 \end{pmatrix}, \qquad \mathcal{P}_z= \begin{pmatrix} 1 & 0 & 0 \\ 0 & 1 & 0 \\ 0 & 0 & 0 \end{pmatrix} \end{align}

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

Будем иллюстрировать изложение проекциями куба со скошенным углом, представленного на верхнем рисунке ниже.
Приведем участок программы рисования такого куба

// ----- Вершины
   gp_Pnt point[10];
   Standard_Real l_side = 1.0;   // Длина стороны куба
   Standard_Real l_cut  = 0.75;   // Длина срезанной стороны
   point[0].SetCoord(0.0,0.0,0.0);
   point[1].SetCoord(l_side,0.0,0.0);
   point[2].SetCoord(l_side,l_side,0.0);
   point[3].SetCoord(0.0,l_side,0.0);
   point[4].SetCoord(0.0,0.0,l_side);
   point[5].SetCoord(l_side,0.0,l_side);
   point[6].SetCoord(l_side,l_cut,l_side);
   point[7].SetCoord(l_cut,l_side,l_side);
   point[8].SetCoord(0.0,l_side,l_side);
   point[9].SetCoord(l_side,l_side,l_cut);
//
   TopoDS_Vertex vertex[10];
   BRep_Builder bRepBuilder;
   for( i=0; i<10; i++ )
      vertex[i] = BRepBuilderAPI_MakeVertex(point[i]);
// Рисуем вершины
   Handle(AIS_Shape) aisPoint[10];
   for( i=0; i<10; i++ ) {
      aisPoint[i] = new AIS_Shape(vertex[i]);
      myAISContext->Display(aisPoint[i],Standard_False);
   }
   Handle(AIS_Shape) aisShape;
//
// ----- Ребра
   TopoDS_Edge edge[15];
   for( i=0;i<4; i++ ) {
      int ip = (i+1)%4;
       edge[i] = BRepBuilderAPI_MakeEdge(vertex[i],vertex[ip]);
   }
   for( i=0;i<5; i++ ) {
      int ip = (i+1)%5;
       edge[i+4] = BRepBuilderAPI_MakeEdge(vertex[i+4],vertex[ip+4]);
   }
    edge[9]  = BRepBuilderAPI_MakeEdge(vertex[6],vertex[9]);
    edge[10] = BRepBuilderAPI_MakeEdge(vertex[7],vertex[9]);
    edge[11] = BRepBuilderAPI_MakeEdge(vertex[0],vertex[4]);
    edge[12] = BRepBuilderAPI_MakeEdge(vertex[1],vertex[5]);
    edge[13] = BRepBuilderAPI_MakeEdge(vertex[2],vertex[9]);
    edge[14] = BRepBuilderAPI_MakeEdge(vertex[3],vertex[8]);
// Рисуем ребра
   for( i=0; i<15; i++ ) {
      aisShape = new AIS_Shape(edge[i]);
      myAISContext->SetColor(aisShape,Quantity_NOC_GREEN,Standard_False);
      myAISContext->Display(aisShape,Standard_False);
   }

1
OCC_cube01.JPG
2
OCC_cube02.JPG
3
OCC_cube03.JPG
4
OCC_cube04.JPG


На втором рисунке показан вид фигуры спереди (проекция на плоскость $x=0$). При этом мы смотрим на кубик вдоль оси $x$ со стороны $+\infty$, ось $y$ горизонтальна и идет вправо, ось $z$ направлена вверх. Вид спереди (фронтальная проекция) устанавливается оператором

    myView->SetProj(V3d_Xpos);     // Вид спереди

Третий рисунок — вид сверху: мы смотрим вдоль оси $z$ со стороны положительных значений. Значения $x$ возрастают направо, значения $y$ — вверх. Вид ссверху устанавливается оператором
    myView->SetProj(V3d_Zpos);     // Вид сверху

Последний рисунок показывает вид слева, который устанавливается так
    myView->SetProj(V3d_Yneg);     // Вид слева

Аксонометрическая проекция

Аксонометрическая проекция, в отличие от ортогональной, дает возможность построить вид предмета с любого направления, т.е. аксонометрической проекцией называется изображение предмета, получающееся его параллельным проектированием на произвольную плоскость. На рисунке показано построение проекции описанного выше куба на плоскость, проходящую через точку $(-4, 0, 0)$ и имеющую вектор нормали $(\sin{25^\circ}, \cos{25^\circ}, 0)$. Проекторы (показаны на рисунке штриховыми лииями) в данном случае перпендикулярны плоскости проектирования.

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

// Построение проекции
    double alpha = 25./180.*M_PI;
    gp_Pln plane(gp_Pnt(-4.,0.,0.),gp_Dir(sin(alpha),cos(alpha),0.));
    Handle (Geom_Surface) geomPlane = new Geom_Plane(plane); 
// Проекции вершин
    gp_Pnt pointPrj[10];
    for( i=0; i<10; i++ ) 
        pointPrj[i] = GeomAPI_ProjectPointOnSurf(point[i],geomPlane);
OCC_cube05.JPG

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

Аксонометрическая проекция называется прямоугольной, если направление проектирования перпендикулярно плоскости проекций, и косоугольной, если направление проектирования составляет с плоскостью угол, отличный от $90^\circ$. Отметим, что в случае прямоугольной проекции, если плоскость проектирования совпадает с одной из координатных плоскостей тела, аксонометрическая проекция совпадает с рассмотренной выше ортогональной.

Пусть положение точек тела задается в некоторой декартовой системе координат $(O, \mathbf{i}, \mathbf{j}, \mathbf{k})$, которую обычно называют мировой. Будем обозначать через $\mathbf{r}=(x, y, z)$ радиус-вектор точки в мировой системе координат. Свяжем с плоскостью проектирования (листом бумаги, экраном монитора) видовую декартову систему координат, у которой оси $X$ и $Y$ лежат в плоскости, а ось $Z$ направлена перпендикулярно плоскости в сторону наблюдателя. Обычно предполагается, что ось $Y$ направлена "вверх", ось $X$ — "направо", а положение начала координат находится в центре.

При проектировании на плоскость размеры предмета (расстояния между его точками), вообще говоря, не сохраняются. Пусть $P$ и $Q$ некоторые точки тела, а $P'$ и $Q'$ соответствующие им точки на плоскости проекции. Расстояние между точками на проекции получается умножением расстояния между соответствующими точками предмета на косинус угла между вектором $\overrightarrow{PQ}$ и его проекцией на плоскость.

Пусть единичные векторы $\mathbf{i}$, $\mathbf{j}$, $\mathbf{k}$ мировой системы координат проецируются на отрезки $OA$, $OB$, $OC$, длины которых, конечно, не больше единицы. Если плоскость проекции расположена таким образом, что длины проекций координатных векторов равны друг другу ( $|OA|=|OB|=|OC|$), то аксонометрическая проекция называется изометрической. Если равны между собой длины двух проекций (либо $|OA|=|OB|$, либо $|OA|=|OC|$, либо $|OB|=|OC|$), то проекция называется диметрической. В общем случае, когда длины проекций векторов локальной системы координат не связаны между собой, аксонометрическая проекция называется триметрической. Диметрическая проекция является частным случаем триметрической, а изометрия — частным случаем диметрии.

Прямоугольная проекция

Рассмотрим соотношения, связывающие координаты точек тела и соответствующих точек в плоскости проекции для параллельной прямоугольной проекции, т.е. в том в случае, когда линии проектирования (проекторы) параллельны друг другу и перпендикулярны плоскости проекции. Будем предполагать, что начало отсчета системы координат связанной с телом совпадает с началом координат на плоскости. Если это не так, следующие ниже преобразования нужно дополнить переносом. Будем предполагать также, что проекция оси $\mathbf{k}$ направлена по оси $Y$ (направления "вверх" для тела и для изображения совпадают). Если это не так, нужно совершить дополнительный поворот в плоскости изображения (см. ниже). При указанных соглашениях переход от видовых координат $(X, Y, Z)$ к мировым координатам $(x, y, z)$ можно получить двумя поворотами, так что проекция характеризуется двумя параметрами. Сделаем это следующим образом.

Пусть $(\mathbf{i}, \mathbf{j}, \mathbf{k})$ базисные векторы мировой системы координат, а $(\mathbf{I}, \mathbf{J}, \mathbf{K})$ — базисные векторы видовой системы координат $(X, Y, Z)$. Изменим вначале базис $(\mathbf{I}, \mathbf{J}, \mathbf{K})$ (переобозначим векторы) так, чтобы вектор $\mathbf{K}$ был направлен "вверх" (вдоль оси $Y$), вектор $\mathbf{J}$ — направо (вдоль оси $X$), а вектор $\mathbf{I}$ перпендикулярно плоскости проекции (вдоль оси $Z$). Матрица этого преобразования:

(2)
\begin{align} \begin{pmatrix} \mathbf{i}'\\ \mathbf{j}' \\ \mathbf{k}' \end{pmatrix}= \begin{pmatrix} 0 & 0 & 1 \\ 1 & 0 & 0 \\ 0 & 1 & 0 \end{pmatrix} \begin{pmatrix} \mathbf{I} \\ \mathbf{J} \\ \mathbf{K} \end{pmatrix} \end{align}

Теперь выполним поворот вокруг оси $y$ (совпадающей с осью $X$), на угол $\pi/2-\theta$ (удобно обозначить через $\theta$ угол между вектором $\mathbf{k}$ и направлением оси $Z$) так, чтобы ось $z$ пошла по нужному направлению $\mathbf{k}$. Это возможно, поскольку вектор $\mathbf{k}$ лежит в плоскости $(Y, Z)$:

(3)
\begin{align} \begin{pmatrix} \mathbf{i}''\\ \mathbf{j}'' \\ \mathbf{k} \end{pmatrix}= \begin{pmatrix} \sin{\theta} & 0 & -\cos{\theta} \\ 0 & 1 & 0 \\ \cos{\theta} & 0 & \sin{\theta} \end{pmatrix} \begin{pmatrix} 0 & 0 & 1 \\ 1 & 0 & 0 \\ 0 & 1 & 0 \end{pmatrix} \begin{pmatrix} \mathbf{I} \\ \mathbf{J} \\ \mathbf{K} \end{pmatrix} \end{align}

Поскольку теперь ось $z$ занимает правильное положение, для того, чтобы совместить две остальные оси, нам достаточно выполнить поворот вокруг оси $z$ на некоторый угол $-\varphi$ (удобно обозначить через $\varphi$ угол, отсчитываемый в обратном направлении):

(4)
\begin{align} \begin{pmatrix} \mathbf{i}\\ \mathbf{j} \\ \mathbf{k} \end{pmatrix}= \begin{pmatrix} \cos{\varphi} & -\sin{\varphi} & 0 \\ \sin{\varphi} & \cos{\varphi} & 0 \\ 0 & 0 & 1 \end{pmatrix} \begin{pmatrix} \sin{\theta} & 0 & -\cos{\theta} \\ 0 & 1 & 0 \\ \cos{\theta} & 0 & \sin{\theta} \end{pmatrix} \begin{pmatrix} 0 & 0 & 1 \\ 1 & 0 & 0 \\ 0 & 1 & 0 \end{pmatrix} \begin{pmatrix} \mathbf{I} \\ \mathbf{J} \\ \mathbf{K} \end{pmatrix} \end{align}

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

(5)
\begin{align} \begin{pmatrix} x \\ y \\ z \end{pmatrix}= \begin{pmatrix} -\sin{\varphi} & -\cos{\varphi}\cos{\theta} & \cos{\varphi}\sin{\theta} \\ \cos{\varphi} & -\sin{\varphi}\cos{\theta} & \sin{\varphi}\sin{\theta} \\ 0 & \sin{\theta} & \cos{\theta} \end{pmatrix} \begin{pmatrix} X \\ Y \\ Z \end{pmatrix} \end{align}

Можно непосредственно проверить, что матрица преобразования ортогональная. Поэтому формулы обратного преобразования записываются с помощью транспонированной матрицы

(6)
\begin{align} \begin{pmatrix} X \\ Y \\ Z \end{pmatrix}= \begin{pmatrix} -\sin{\varphi} & \cos{\varphi} & 0 \\ -\cos{\varphi}\cos{\theta} & -\sin{\varphi}\cos{\theta} & \sin{\theta} \\ \cos{\varphi}\sin{\theta} & \sin{\varphi}\sin{\theta} & \cos{\theta} \end{pmatrix} \begin{pmatrix} x \\ y \\ z \end{pmatrix} \end{align}

а координаты $(X, Y)$ проекции точки $(x, y, z)$ равны

(7)
\begin{align} \begin{pmatrix} X \\ Y \end{pmatrix}= \begin{pmatrix} -\sin{\varphi} & \cos{\varphi} & 0 \\ -\cos{\varphi}\cos{\theta} & -\sin{\varphi}\cos{\theta} & \sin{\theta} \end{pmatrix} \begin{pmatrix} x \\ y \\ z \end{pmatrix} \end{align}

Последнее выражение и определяет прямоугольную аксонометрическую проекцию. Отметим, что в аксонометрической проекции мы смотрим на тело из той точки бесконечности, на которую указывает единичный вектор $(x, y, z)=(\cos{\varphi}\sin{\theta}, \sin{\varphi}\sin{\theta}, \cos{\theta})$ мировой системы координат. Таким образом, введенные выше углы $\varphi$ и $\theta$ являются сферическими углами направления на точку наблюдения (в этом и состоит упомянутые выше удобства обозначений).

Триметрическая, диметрическая, изометрическая проекции

Посмотрим, чему равны координаты точек $A$, $B$, $C$, проекций концов единичных координатных векторов $\mathbf{i}$, $\mathbf{j}$, $\mathbf{k}$. Подставляя в последнюю формулу тройки чисел $(1, 0, 0)$, $(0, 1, 0)$, $(0, 0, 1)$, получаем

(8)
\begin{align} X_A & =-\sin{\varphi} & X_B & =\cos{\varphi} & X_C & = 0 \\ Y_A & =-\cos{\varphi}\cos{\theta} & Y_B & =-\sin{\varphi}\cos{\theta} & Y_C & = \sin{\theta} \end{align}

Длины проекций координатных векторов равны

(9)
\begin{align} |OA| & =\sqrt{1-\cos^2{\varphi}\sin^2{\theta}} & |OB| & =\sqrt{1-\sin^2{\varphi}\sin^2{\theta}} & |OC| & = \sin{\theta} \end{align}

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

Введем показатели искажения размера $(f_x, f_y, f_z)$ по осям координат:

(10)
\begin{align} f_x & =\sqrt{1-\cos^2{\varphi}\sin^2{\theta}} & f_y & =\sqrt{1-\sin^2{\varphi}\sin^2{\theta}} & f_z & = \sin{\theta} \end{align}

Показатель искажения равен отношению длины на плоскости проекции к реальной длине в направлении соответствующей оси. Эти величины не независимы, поскольку, как легко проверить

(11)
\begin{equation} f^2_x +f^2_y + f^2_z = 2 \end{equation}

В триметрии мы можем произвольно (в рамках ограничения $0\leq f_x, f_y, f_z \leq 1$) выбрать два из показателей искажения, из (11) найти третий, а по ним вычислить параметры проекции:

(12)
\begin{align} \sin{\theta} & = f_z & \sin{\varphi} & =\pm\frac{1}{f_z}\sqrt{1-f^2_y} & \cos{\varphi} & =\pm\frac{1}{f_z}\sqrt{1-f^2_x} \end{align}

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

  • Равны показатели искажения по вертикальной и одной из горизонтальных осей, например, $f_x = f_z = f$.
  • Показатель искажения по третьей равен половине показателя искажения по другим осям, т.е. $f_y = 0.5f$.
  • Угол $\theta$ острый: мы смотрим на тело немного сверху.
  • Угол $\varphi$ положительный: мы смотрим на тело со стороны первого квадранта.

В этом случае, учитывая соотношение (11), получаем

(13)
\begin{align} f = f_x = f_z = \frac{2\sqrt{2}}{3}, \qquad f_y = \frac{\sqrt{2}}{3} \end{align}

так что

(14)
\begin{align} \cos{\theta} & = \frac{1}{3} & \sin{\theta} & = \frac{2\sqrt{2}}{3}& \sin{\varphi} & =\frac{1}{2}\sqrt{\frac{7}{2}} & \cos{\varphi} & =\frac{1}{2\sqrt{2}} \end{align}

и мы смотрим на тело из той точки бесконечности, на которую указывает (в мировой системе координат) единичный вектор
$(x, y, z)=(\cos{\varphi}\sin{\theta}, \sin{\varphi}\sin{\theta}, \cos{\theta})= (1/3,\sqrt{7}/3, 1/3)$. Данная проекция выполняется посредством матрицы

(15)
\begin{align} \begin{pmatrix} X \\ Y \end{pmatrix}= \begin{pmatrix} -\frac{1}{2}\sqrt{\frac{7}{2}} & \frac{1}{2\sqrt{2}} & 0 \\ -\frac{1}{6\sqrt{2}} & -\frac{1}{6}\sqrt{\frac{7}{2}} & \frac{2\sqrt{2}}{3} \end{pmatrix} \begin{pmatrix} x \\ y \\ z \end{pmatrix} \end{align}

Концы единичных координатных векторов проецируются в точки

(16)
\begin{align} X_A & =-\frac{1}{2}\sqrt{\frac{7}{2}}=-0.9354 & X_B & =\frac{1}{2\sqrt{2}}=0.3536 & X_C & = 0 \\ Y_A & =-\frac{1}{6\sqrt{2}}=-0.1178 & Y_B & =-\frac{1}{6}\sqrt{\frac{7}{2}}=-0.3118 & Y_C & = \frac{2\sqrt{2}}{3}=0.9428 \end{align}

Угол между горизонтальной осью и проекцией оси $x$ составляет $\arctan{(Y_A/X_A)}=7.2^\circ$, а угол между горизонтальной осью и проекцией оси $y$ составляет $\arctan{(Y_B/X_B)}=41.3^\circ$.

// Устанавливаем диметрическую проекцию
    myView->SetAt (0.0, 0.0, 0.0);
    myView->SetEye (1.0, sqrt(7.), 1.0);
    myView->SetUp (0.0, 0.0, 1.0);
OCC_cube06.JPG


Если все три показателя искажения равны, мы имеем частный случай аксонометрической проекции — изометрию. При этом все три показателя искажения равны, так что

(17)
\begin{align} f = f_x = f_y = f_z = \sqrt{\frac{2}{3}} \end{align}

Если, как и выше, считать угол $\theta$ острым, а $\varphi$ положительным, то

(18)
\begin{align} \cos{\theta} & = \frac{1}{\sqrt{3}} & \sin{\theta} & = \sqrt{\frac{2}{3}}& \sin{\varphi} & =\frac{1}{\sqrt{2}} & \cos{\varphi} & =\frac{1}{\sqrt{2}} \end{align}

и мы смотрим на тело из той точки бесконечности, на которую указывает единичный вектор $(x, y, z)=$ $(\cos{\varphi}\sin{\theta}, \sin{\varphi}\sin{\theta}, \cos{\theta})=$ $(1/\sqrt{3},1/\sqrt{3}, 1/\sqrt{3})$. Данная проекция выполняется посредством матрицы

(19)
\begin{align} \begin{pmatrix} X \\ Y \end{pmatrix}= \begin{pmatrix} -\frac{1}{\sqrt{2}} & \frac{1}{\sqrt{2}} & 0 \\ -\frac{1}{\sqrt{6}} & -\frac{1}{\sqrt{6}} & \sqrt{\frac{2}{3}} \end{pmatrix} \begin{pmatrix} x \\ y \\ z \end{pmatrix} \end{align}

Концы единичных координатных векторов проецируются в точки

(20)
\begin{align} X_A & =-\frac{1}{\sqrt{2}}=-0.7071 & X_B & =\frac{1}{\sqrt{2}}=0.7071 & X_C & = 0 \\ Y_A & =-\frac{1}{\sqrt{6}} =-0.4082 & Y_B & =-\frac{1}{\sqrt{6}} =-0.4082 & Y_C & = \sqrt{\frac{2}{3}}= 0.8165 \end{align}

Углы между горизонтальной осью и проекциями осей $x$ и $y$ равны и составляют $\arctan{(Y_A/X_A)}=\arctan{(Y_B/X_B)}=30^\circ$

На рисунке показана изометрическая проекция куба со срезанным углом

// Устанавливаем изометрическую проекцию
    myView->SetAt (0.0, 0.0, 0.0);
    myView->SetEye (1.0, 1.0, 1.0);
    myView->SetUp (0.0, 0.0, 1.0);
// или, что то же
//     myView->SetProj(V3d_XposYposZpos);
OCC_cube07.JPG

Общий вид прямоугольной проекции

Выше предполагалось, что:

  • начало отсчета мировой системы координат, совпадает с началом координат на плоскости проекции;
  • проекция оси $\mathbf{k}$ направлена по оси $Y$ (направления "вверх" для тела и для изображения совпадают).

Рассмотрим теперь общий случай. Если начало видовой системы координат $(X=0, Y=0, Z=0)$ (точка начала координат плоскости проекции, плоскости, на которой строится изображение) имеет мировые координаты $(x_{vo}, y_{vo}, z_{vo})$, то для того, чтобы прийти к разобранной выше ситуации, нужно выполнить сдвиг мировой системы координат на вектор $\mathbf{t}=(x_{vo}, y_{vo}, z_{vo})$, т.е. в формулах выше вместо $(x, y, z)$ нужно поставить $(x-x_{vo}, y-y_{vo}, z-z_{vo})$.

Если проекция вектора $\mathbf{k}$ направлена не по оси $Y$ (плоскость проекции повернута вокруг оси $Z$), то обозначим через $\psi$ угол между проекцией вектора $\mathbf{k}$ и осью $Y$. Для использования полученных выше выражений, нужно выполнить поворот видовой системы координат вокруг оси $Z$ на угол $\psi$ (угол отсчитывается от оси $Y$ в сторону проекции вектора $\mathbf{k}$ против часовой стрелки, если смотреть с конца вектора $Z$). В этом случае координаты точек проекции будут вычисляються по формуле

(21)
\begin{align} \begin{pmatrix} X \\ Y \end{pmatrix}= \begin{pmatrix} \cos{\psi} & -\sin{\psi} \\ \sin{\psi} & \cos{\psi} \end{pmatrix} \begin{pmatrix} -\sin{\varphi} & \cos{\varphi} & 0 \\ -\cos{\varphi}\cos{\theta} & -\sin{\varphi}\cos{\theta} & \sin{\theta} \end{pmatrix} \begin{pmatrix} x \\ y \\ z \end{pmatrix} \end{align}

Косоугольная проекция

В косоугольной аксонометрической проекции линии проектирования параллельны друг другу, но не перпендикулярны плоскости проекции. Направление проекторов определяется двумя параметрами.

Выберем их следующим образом (см. рисунок). Обозначим через $\beta$ угол между проекторами и плоскостью проекции (для прямоугольной проекции он равен $90^\circ$). При этом длина проекции единичного отрезка, направленного вдоль оси $Z$ (перпендикулярно плоскости проектирования), равна $f = \cot{\beta}$. В качестве второго параметра возьмем угол между проекцией оси $Z$ и осью $X$, который обозначим через $\alpha$. Вектор, задающий направление проекторов, в этих обозначениях имеет компоненты $(f\cos{\alpha}, f\sin{\alpha},-1)$, так что точка $(X, Y, Z)$ (видовые координаты) проецируется в точку $(X', Y')$ по правилу

(22)
\begin{align} X' &= X +Z\cot{\beta}\cos{\alpha}\\ Y' &= Y +Z\cot{\beta}\sin{\alpha} \end{align}
Project_20.jpg


Если координаты точки заданы в мировой системе координат, то преобразование $(x, y, z)\Rightarrow(X, Y, Z)$ выполняется согласно (6).