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