.. role:: code :class: code Двумерная проекционная кривая MbProjCurve ========================================== .. _MbProjCurve_Two-Dimensional_Projection_Curve: .. версия ядра: 118065 Класс :code:`MbProjCurve` объявлен в файле *cur_projection_curve.h*. Двумерная проекционная кривая описывается пространственной кривой :ref:`MbCurve3D `\* **spaceCurve**, поверхностью :ref:`MbSurface `\* **surface** и двумерной кривой :ref:`MbCurve `\* **curve**. У кривой есть ещё некоторые данные, которые не обязательны и служат для ускорения работы методов кривой. Двумерная проекционная кривая представляет собой проекцию пространственной кривой **spaceCurve** на поверхность **surface**, которая приближённо описывается двумерной кривой **curve** в области определения параметров поверхности. Области определения параметров кривых **spaceCurve** и **curve** совпадают. Двумерная кривая **curve**, как правило, является сплайном, контрольные точки которого получены проецированием точек пространственной кривой **spaceCurve** на поверхность **surface**. Параметризация кривой **curve** согласована с параметризацией пространственной кривой в контрольных точках. Двумерная кривая **curve** может располагаться за пределами области определения параметров поверхности. В методе .. code:: cpp PointOn( double & t, MbCartPoint & r) радиус-вектор кривой **r** описывается векторной функцией .. math:: \mathbf{r}(t) = [u \quad v], где *u*, *v* — параметры проекции точки **spaceCurve**\(*t*) на поверхность **surface**. Метод :code:`PointOn`\() корректирует параметр *t*, если он выходит за пределы области определения кривой. Для вычисления точки без коррекции параметра используется метод :code:`_PointOn`\(). Начальное приближение параметров *u* и *v* вычисляется методом .. code:: cpp curve->PointOn(t, point), *u* = **point**\ .x, *v* = **point**\ .y. Далее параметры *u* и *v* уточняются итерационным методом, использующим уравнения .. math:: \mathbf{deriveU} \cdot (\mathbf{spaceCurve}(t) - \mathbf{surface}(u,\, v)) = 0, \mathbf{deriveV} \cdot (\mathbf{spaceCurve}(t) - \mathbf{surface}(u,\, v)) = 0, где **deriveU** и **deriveV** — частные производные радиуса-вектора поверхности, которые вычисляются методами .. code:: cpp surface->_DeriveU(u, v, deriveU) и .. code:: cpp surface->_DeriveV(u, v, deriveV), соответственно. Проекционная кривая приведена на рисунке: .. figure:: ../../pictures/O.3.16.1.png :width: 15cm :align: center Проекционная кривая используется для точного описания проекции пространственной кривой на поверхность.