.. role:: blue :class: blue Поверхность тора MbTorusSurface ================================ .. _MbTorusSurface_Toroidal_Surface: .. версия ядра: 1180ХХ Класс :blue:`MbTorusSurface` объявлен в файле *surf\_torus\_surface.h*. Поверхность тора :blue:`MbTorusSurface` принадлежит к группе элементарных поверхностей :blue:`MbElementarySurface`. Поверхность тора описывается радиусом центров *majorRadius* и радиусом трубки *minorRadius*, заданными в локальной системе координат :ref:`MbPlacement3D ` **position**. Первый параметр поверхности отсчитывается по дуге от вектора **position.axisX** в направлении вектора **position.axisY**. Первый параметр поверхности *u* принимает значения на отрезке: *umin* ≤ *u* ≤ *umax*. Значения *u* = 0 и *u* = 2π соответствуют точке на плоскости XZ. Поверхность может быть периодической по первому параметру. У периодической поверхности *umax* - *umin* = 2π, у не периодической поверхности *umax* - *umin* < 2π. Второй параметр поверхности отсчитывается по дуге от плоскости XY локальной системы координат поверхности в направлении вектора **position.axisZ**. Второй параметр поверхности *v* принимает значения на отрезке: *vmin* ≤ *v* ≤ *vmax*. Значения *v* = 0 и *v* = 2π соответствуют точке на плоскости XY локальной системы координат поверхности. Поверхность может быть периодической по второму параметру при *majorRadius* > *minorRadius*. У периодической поверхности *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( \mathit{majorRadius} + \mathit{minorRadius} \cdot \cos(v) \right) \left( \cos(u)\, \mathbf{position.axisX} + \sin(u)\, \mathbf{position.axisY} \right) + \\ \mathit{minorRadius} \cdot \sin(v)\, \mathbf{position.axisZ} \end{equation} Поверхность тора приведена на рисунке: .. figure:: /MODELER/SURFACES/pictures/O.5.6.1.png :width: 15cm :align: center Радиус трубки должен быть больше нуля: *minorRadius* > 0. Радиус центров должен быть не меньше радиуса трубки, взятого с обратным знаком: *majorRadius* > -*minorRadius*. Если *majorRadius* < *minorRadius*, то поверхность имеет полюс для параметра *v* = arccos(*majorRadius* / *minorRadius*) и *v* = 2π - arccos(*majorRadius* / *minorRadius*). Для граничных параметров поверхности должны соблюдаться неравенства: *umin* < *umax*, *vmin* < *vmax*. Локальная система координат **position** может быть как правой, так и левой. Если локальная система координат правая, то нормаль направлена от трубки поверхности, если локальная система координат левая, то нормаль направлена внутрь трубки поверхности.