RU: Surface of Revolution

Геометрические примитивы

Поверхность вращения

Поверхность вращения получается в результате поворота кривой вокруг некоторой оси. Частными случаями поверхности вращения служат:

  • плоскость;
  • круговой цилиндр;
  • круговой конус;
  • сфера;
  • тор.

Уравнение поверхности вращения

Пусть заданы: ${\bf r}_C(t)$, $t_{\min} \le t \le t_{\max}$ — кривая в пространстве, ${\bf r}_O$ — точка и единичный вектор ${\bf e}$. Точка ${\bf r}_O$ и вектор ${\bf e}$, отложенный от этой точки, задают ось вращения. Поверхность вращения определяется как поверхность ${\bf r}(\varphi,t)$, ометаемая кривой ${\bf r}_C(t)$ в результате ее поворота вокруг оси вращения на угол от $\varphi_1$ до $\varphi_2$ против часовой стрелки, если смотреть с конца вектора ${\bf e}$.

Введем локальную (связанную с поверхностью) декартову систему координат $(O,{\bf i},{\bf j},{\bf k})$ с началом в точке ${\bf r}_O$, с осью ${\bf k}$, направленной по вектору ${\bf e}$. Введем также связанную с поверхностью цилиндрическую систему координат $(r, \varphi, z)$. Для построения радиус-вектора ${\bf r}(\varphi,t)$ точки на поверхности нужно

  1. вычислить радиус-вектор ${\bf r}(t) ={\bf r}_C(t)-{\bf r}_O$ точки на кривой в локальной системе координат;
  2. определить декартовы координаты точки в локальной системе координат: $x(t)=({\bf r}(t),{\bf i})$, $y(t)=({\bf r}(t),{\bf j})$, $z(t)=({\bf r}(t),{\bf k})$;
  3. вычислить цилиндрические координаты точки: $r(t)=\sqrt{\left(x(t)\right)^2+\left(y(t)\right)^2}$, $\tan{(\varphi_0(t))}=x(t) / y(t)$. Если кривая ${\bf r}_C(t)$ лежит в плоскости, проходящей через ось $z$, то угол $\varphi_0$ от параметра $t$ не зависит;
  4. вычислить координаты точки, отвечающей параметру $\varphi$: $x(\varphi,t)=r(t)\cos{(\varphi_0(t)+\varphi)}$, $y(\varphi,t)=r(t)\sin{(\varphi_0(t)+\varphi)}$, $z(t,\varphi) = z(t)$.

Итак

(1)
\begin{align} \mathbf{r}(\varphi,t) ={\bf r}_O + x(\varphi,t) \mathbf{i} + y(\varphi,t) \mathbf{j} + z(t) \mathbf{k} \end{align}

Построение поверхности вращения в OpenCascade

В OpenCascade построение поверхности вращения выполняется классом Geom_SurfaceOfRevolution. Конструктору передается указатель на кривую и ось вращения:

   Geom_SurfaceOfRevolution(const Handle(Geom_Curve)& C,const gp_Ax1& A1)

В описании указывается, что ось вращения и кривая должны лежать в одной плоскости, но по-видимому это не так (см. пример ниже). Направление вращения принимается за направление изменения $u$-параметра, т.е. параметр $u$ есть угол поворота и он изменяется от $0$ до $2\pi$. Параметр $v$ определяется уравнением кривой.

В качестве примера построим поверхность, получающуюся при вращении прямой относительно оси $z$. Если прямая параллельна оси, то поверхностью будет круговой цилиндр. Если прямая пересекает ось, то поверхность — конус. В общем случае получается поверхность второго порядка — однополостный гиперболоид (элемент конструкции шуховской башни). В нашем примере прямая проходит через точки $(1,0,0)$ и $(0,1,1)$, расстояние между которыми равно $\sqrt{3}$.

OCC_SurfRot.jpg
// Создание линии, проходящей через две точки
   gp_Lin gpLine = gce_MakeLin(gp_Pnt(1.,0.,0.),gp_Pnt(0.,1.,1.));
   Handle(Geom_Line) curve = new Geom_Line(gpLine);
//
// Строим поверхность вращения
   Handle(Geom_SurfaceOfRevolution) surface = new Geom_SurfaceOfRevolution(curve, gp::OZ());
// Вырезаем ее часть
   Handle(Geom_RectangularTrimmedSurface) trimmedSurface = new Geom_RectangularTrimmedSurface(surface,0.,2.*PI,
      0.,sqrt(3.),false);