Геометрические примитивы
Линейное преобразование
В настоящем разделе мы рассмотрим линейные преобразования точек пространства. Обратим внимание на то, что преобразование более сложных объектов (вектор, кривая, поверхность) сводится к преобразованию принадлежащих им точек.
В OpenCascade ортогональное линейное преобразование описывается объектом класса gp_Trsf, а для описания общего линейного преобразования предназначен класс gp_GTrsf.
Математическое введение
В декартовой системе координат положение точки $A(\mathbf{r}_{A})$ задается тремя координатами:
(1)При линейном преобразовании пространства точка $A$ с радиус-вектором $\mathbf{r}_A$ переходит в новую точку $B$ с радиус-вектором $\mathbf{r}_B$ (в той же системе координат) по закону
(2)где $\mathcal{A}$ — линейный оператор, а $\mathbf{t}$ — вектор переноса. В развернутой записи эта формула имеет вид:
(3)или в матричной записи:
(4)Отметим, что четвертая компонента вектора и окаймляющие четвертый столбец и четвертая строка матрицы вводятся для того, чтобы единообразно записать формулы преобразования переноса. В случае отсутствия переноса достаточно рассматривать матрицу линейного оператора $\mathcal{A}$ размера $3\times 3$.
Если преобразование переводит точку $O$ в точку $O'$, а тройку ортонормированных векторов $(\mathbf{e}_x,\mathbf{e}_y,\mathbf{e}_z)$ в тройку $(\mathbf{e}'_x,\mathbf{e}'_y,\mathbf{e}'_z)$, то элементы матрицы преобразования равны:
(5)При выполнении двух последовательных преобразований их матрицы перемножаются в том порядке, в котором выполняются преобразования, т.е. матрица первого преобразования стоит справа.
Преобразование называется ортогональным, если оно переводит тройку взаимно-перпендикулярных векторов также во взаимно-перпендикулярные векторы. Ортогональными преобразованиями являются перенос, поворот, отражение, масштабирование, а также их комбинация.
Преобразование переноса применимо к точке (в частности, началу системы координат). Оно задается вектором сдвига $\mathbf{t}=(t_x, t_y, t_z)$: точка $A$ с радиус-вектором $\mathbf{r}_A=(x_A, y_A, z_A)$ в результате преобразования переходит в точку $B$ с радиус-вектором $\mathbf{r}_B=\mathbf{r}_A+\mathbf{t}$:
(6)или в матричной записи
(7)Преобразование поворота характеризуется тем, что точки пространства перемещаются как твердое тело: расстояния между точками не изменяются, а также не изменяются углы между отрезками, соединяющими точки. При этом по крайней мере одна точка остается неподвижной. Если неподвижная точка не совпадает с началом координат, то операцию поворота можно выполнить в виде последовательности преобразований:
- Перенести начало координат в неподвижную точку.
- Выполнить поворот с неподвижной точкой в начале координат на нужный угол.
- Вернуться к старой системе отсчета.
Преобразование поворота с неподвижной точкой в начале координат записывается как
(8)где $r_{ij}$ — компоненты матрицы преобразования. Столбцы матрицы преобразования являются компонентами векторов $\mathbf{r}_x$, $\mathbf{r}_y$, $\mathbf{r}_z$, в которые переходят при повороте векторы базиса. Поэтому столбцы матрицы, рассматриваемые как векторы, перпендикулярны друг другу, а длины их равны единицы. Таким же свойством обладают и строки матрицы. Матрицы, обладающие указанным свойством, называются ортогональными. Для ортогональной матрицы обратная матрица равна транспонированной.
У преобразования поворота всегда существует ось, вектор направления которой не претерпевает изменения в процессе поворота — ось поворота. Действие оператора поворота можно интерпретировать как поворот пространства вокруг этой оси на некоторый угол. В частности, повороты вокруг осей координат выполняются в координатных плоскостях, и их матрицы равны
(9)Выпишем выражения для элементов матрицы поворота на угол $\varphi$ относительно оси, задаваемой единичным вектором $\mathbf{e}$. При таком повороте произвольный вектор $\textbf{a}=(a_x, a_y, a_z)$ переходит в $\mathcal{R}\textbf{a}$, равный
(10)В частности, векторы базиса переходят в
(11)и матрица преобразования имеет вид:
(12)Отражение относительно начала координат есть преобразование $\mathbf{r} \Rightarrow \mathbf{r}'=-\mathbf{r}$. Если отражение производится относительно точки $\mathbf{r}_C$, не являющейся началом координат, то нужно дополнительно перенести начало координат в эту точку, так что $\mathbf{r}'-\mathbf{r}_C=-(\mathbf{r}-\mathbf{r}_C)$, или $\mathbf{r}'=-\mathbf{r}+2\mathbf{r}_C$. Матричная запись преобразования имеет вид
(13)Преобразование отражения относительно оси, исходящей из начала координат, состоит в обращении знака у перпендикуляра, опущенного из точки на ось. Если $\mathbf{e}$ — единичный вектор оси, то $\mathbf{r}' = -\mathbf{r}+2(\mathbf{r},\mathbf{e})\mathbf{e}$. Если начало оси находится в точке $\mathbf{r}_C$, то, выполняя перенос начала координат, получим $\mathbf{r}'=-\mathbf{r}+2\mathbf{r}_C+2(\mathbf{r}-\mathbf{r}_C,\mathbf{e})\mathbf{e}$. Матричная запись преобразования отражения относительно оси имеет вид
(14)Отражение относительно плоскости $x=0$ есть преобразование $(x, y,z) \Rightarrow (-x, y,z)$. Аналогично выполняются отражения относительно других координатных плоскостей, так что матрицы преобразования выглядят так:
(15)В общем случае отражение точки относительно плоскости означает переход к точке, расположенной симметрично данной по отношению к этой плоскости. Пусть уравнение плоскости имеет вид
(16)где $N_x$, $N_y$, $N_z$ и $d$ — параметры, определяющие плоскость. Напомним их геометрический смысл: тройка чисел $N_x=\cos{\alpha}$, $N_y=\cos{\beta}$, $N_z=\cos{\gamma}$ служит компонентами единичного вектора $\mathbf{N}$ нормали к плоскости, а $d$ есть расстояние плоскости от начала координат. Указанная выше симметричная точка имеет радиус-вектор $\mathbf{r}'=\mathbf{r}-2(\mathbf{r},\mathbf{N})\mathbf{N} + 2d\mathbf{N}$. Матричная запись преобразования относительно плоскости имеет вид
(17)Преобразование масштабирования с множителем $S$ относительно точки $\mathbf{r}_C$ имеет вид $\mathbf{r}' = S \mathbf{r} + (1-S)\mathbf{r}_C$.