Кубический сплайн MbCubicSpline3D
Класс MbCubicSpline3D объявлен в файле cur_cubic_spline3d.h.
Кубический сплайн является наследником кривой MbPolyCurve3D. Кривая описывается множеством контрольных точек SArray<MbCartPoint3D> pointList, множеством вторых производных кривой в контрольных точках SArray<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].
В методе PointOn( double & t, MbCartPoint3D & r) радиус-вектор кривой r описывается векторной функцией
где
а tList[i] ≤ t ≤ tList[i + 1].
Кубический сплайн, построенный по тем же контрольным точкам, что и составная кривая Эрмита, приведён на рисунке:
Параметр кривой t принимает значения на отрезке: tmin ≤ t ≤ tmax, где tmin = tList[0], tmax = tList[splinesCount]. Кривая может быть периодической.
Форма кривой зависит от расположения контрольных точек и от множества tList значений параметра в контрольных точках. При построении кривой только по контрольным точкам значения параметра кривой в контрольных точках tList[i], i = 0, 1, …, splinesCount, изменяются пропорционально расстоянию между точками, а вторые производные vectorList[i], i = 1, 2, …, splinesCount – 1 вычисляются путём решения системы уравнений.