.. role:: blue :class: blue Кубический сплайн MbCubicSpline3D ================================= .. _MbCubicSpline3D_Cubic_Spline: .. версия ядра: Класс :blue:`MbCubicSpline3D` объявлен в файле **cur_cubic_spline3d.h**. Кубический сплайн является наследником кривой MbPolyCurve3D. Кривая описывается множеством контрольных точек SArray<:ref:`MbCartPoint3D `> **pointList**, множеством вторых производных кривой в контрольных точках SArray<:ref:`MbVector3D `> **vectorList**, множеством значений параметра кривой в контрольных точках *tList*, максимальным значением индекса множества параметров *splinesCount* и признаком периодичности кривой *closed*. У кривой есть ещё некоторые данные, которые не обязательны и служат для ускорения работы методов кривой. Кубический сплайн при значении параметра *tList*\[*i*\], *i* = 0, 1, ..., *splinesCount*, проходит через контрольную точку **pointList**\[*i*\] и имеет в ней вторую производную **vectorList**\[*i*]. Кривая построена так, что при переходе из точки **pointList**\[*i*]\ в точку **pointList**\[*i* + 1] вторая производная радиуса вектора кривой изменяется линейно от **vectorList**\[*i*\] до **vectorList**\[*i* + 1]. При вычислении радиуса-вектора точки составной кривой сначала по значению параметра *t* кривой определяется номер *i* рабочего участка, из условия *tList*\[*i*] ≤ *t* ≤ *tList*\[*i* + 1]. Радиус-вектор кривой вычисляется по значениям **pointList**\[*i*], **pointList**\[*i* + 1], **vectorList**\[*i*], **vectorList**\[*i* + 1] найденного участка для локального параметра *w*, который определяется по *tList*\[*i*] и *tList*\[*i* + 1]. В методе :blue:`PointOn`\( double & *t*, :ref:`MbCartPoint3D ` & **r**) радиус-вектор кривой **r** описывается векторной функцией .. math:: r(t) = (1 - w)\mathbf{pointList}[i] + w\mathbf{pointList}[i + 1] + \left( (-2w + 3w^{2} - w^{3})\mathbf{vectorList}[i] + (-w + w^{3})\mathbf{vectorList}[i + 1] \right)\frac{(\mathit{tList}[i + 1] - \mathit{tList}[i])^{2}}{6}, где .. math:: w = \frac{t - \mathit{tList}[i]}{\mathit{tList}[i + 1] - \mathit{tList}[i]}, а *tList*\[*i*] ≤ *t* ≤ *tList*\[*i* + 1]. Кубический сплайн, построенный по тем же контрольным точкам, что и составная кривая Эрмита, приведён на рисунке: .. figure:: /MODELER/CURVES/pictures/O.4.9.1.png :width: 15cm :align: center Параметр кривой *t* принимает значения на отрезке: *tmin* ≤ *t* ≤ *tmax*, где *tmin* = *tList*\[0], *tmax* = *tList*\[*splinesCount*]. Кривая может быть периодической. Форма кривой зависит от расположения контрольных точек и от множества *tList* значений параметра в контрольных точках. При построении кривой только по контрольным точкам значения параметра кривой в контрольных точках *tList*\[*i*], *i* = 0, 1, ..., *splinesCount*, изменяются пропорционально расстоянию между точками, а вторые производные **vectorList**\[*i*], *i* = 1, 2, ..., *splinesCount* – 1 вычисляются путём решения системы уравнений.