.. role:: blue :class: blue Поверхность вращения MbRevolutionSurface ========================================= .. _MbRevolutionSurface_Revolution_Surface: .. версия ядра: 1180ХХ Класс :blue:`MbRevolutionSurface` объявлен в файле *surf\_revolution\_surface.h*. Поверхность вращения :blue:`MbRevolutionSurface` принадлежит к группе поверхностей движения :blue:`MbSweptSurface`. Поверхность вращения является частным случаем поверхности движения с направляющей кривой в форме окружности или её дуги. Поверхность вращения описывается образующей кривой :ref:`MbCurve3D ` \* **curve**, локальной системой координат :ref:`MbPlacement3D ` **position**, вектор **position.axisZ** которой является осью вращения, признаком расположения кривой и оси вращения в одной плоскости *planeData*, признаком наличия полюса поверхности при начальном значении первого параметра *poleMin*, признаком наличия полюса поверхности при конечном значении первого параметра *poleMax*, значениями первого параметра поверхности в полюсах поверхности *uPoleMin*, *uPoleMax*, если соответствующий полюс присутствует. У поверхности есть ещё некоторые данные, которые не обязательны и служат для ускорения работы методов поверхности. Первый параметр поверхности *u* совпадает с параметром образующей кривой. Первый параметр поверхности принимает значения на отрезке *umin* ≤ *u* ≤ *umax*, который соответствует области определения образующей кривой. Поверхность может быть периодической по первому параметру, если периодической является образующая кривая. Второй параметр поверхности *v* принимает значения на отрезке: *vmin* ≤ *v* ≤ *vmax*. Значения *v* = 0 и *v* = 2π соответствуют точке на образующей кривой. Поверхность может быть периодической по второму параметру. У периодической поверхности *vmax* - *vmin* = 2π, у не периодической поверхности *vmax* - *vmin* < 2π. В методе :blue:`PointOn`\( double *u*, double *v*, :ref:`MbCartPoint3D ` & **s** ) радиус-вектор поверхности **s** описывается векторной функцией .. math:: :nowrap: \begin{equation} \mathbf{s}(u, v) = \mathbf{position.origin} + \left( \mathbf{curve}(u) - \mathbf{position.origin} \right) \mathbf{M}(v), \end{equation} где **M**\(*v*) — матрица вращения. Заметим, что умножение вектора (**curve**\(*u*) - **position.origin**) на матрицу **M**\(*v*) выполняется справа. Матрица вращения имеет вид .. math:: :nowrap: \begin{equation} M(v) = A^{-1} \cdot \begin{bmatrix} \cos v & -\sin v & 0 \\ \sin v & \cos v & 0 \\ 0 & 0 & 1 \end{bmatrix} \cdot A = \begin{bmatrix} \mathbf{position.axisX} \\ \mathbf{position.axisY} \\ \mathbf{position.axisZ} \end{bmatrix}^{-1} \cdot \begin{bmatrix} \cos v & -\sin v & 0 \\ \sin v & \cos v & 0 \\ 0 & 0 & 1 \end{bmatrix} \cdot \begin{bmatrix} \mathbf{position.axisX} \\ \mathbf{position.axisY} \\ \mathbf{position.axisZ} \end{bmatrix}. \end{equation} Матрица **A** является матрицей преобразования координат радиуса-вектора точки из локальной системы координат **position** в глобальную систему координат. Строки матрицы **A** составлены из компонент базисных векторов локальной системы координат. Матрица **M**\(*v*) переводит вектор **curve**\(*u*) - **position.origin** в локальную систему координат, поворачивает его в ней на угол *v* вокруг оси вращения и возвращает повёрнутый вектор обратно в глобальную систему координат. Поверхность вращения приведена на рис. 1: .. figure:: /MODELER/SURFACES/pictures/O.5.8.1.png :width: 12cm :align: center Рис. 1 Если начальный или конечный край образующей кривой проходит через ось вращения, то поверхность имеет полюс для параметра *umin* или *umax* соответственно. Для граничных значений второго параметра поверхности должно соблюдаться неравенство: *vmin* < *vmax*. Вращение точек образующей кривой выполняется по дуге вокруг вектора **position.axisZ** от вектора **position.axisX** в направлении вектора **position.axisY**. Локальная система координат **position** может быть как правой, так и левой.