Геометрические примитивы
Поверхность вращения
Поверхность вращения получается в результате поворота кривой вокруг некоторой оси. Частными случаями поверхности вращения служат:
- плоскость;
- круговой цилиндр;
- круговой конус;
- сфера;
- тор.
Уравнение поверхности вращения
Пусть заданы: ${\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)$ точки на поверхности нужно
- вычислить радиус-вектор ${\bf r}(t) ={\bf r}_C(t)-{\bf r}_O$ точки на кривой в локальной системе координат;
- определить декартовы координаты точки в локальной системе координат: $x(t)=({\bf r}(t),{\bf i})$, $y(t)=({\bf r}(t),{\bf j})$, $z(t)=({\bf r}(t),{\bf k})$;
- вычислить цилиндрические координаты точки: $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$ не зависит;
- вычислить координаты точки, отвечающей параметру $\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)Построение поверхности вращения в 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}$.

// Создание линии, проходящей через две точки
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);