Кардинальный сплайн Microsoft является кубическим Эрмитовый сплайн .
Эрмитовый сплайн описывается конечными точками и касательными векторами в этих точках P0, P1, m0, m1
.
Для интерполяциимножества точек кардинальные сплайны дают непрерывность первого порядка (значения и касательные синхронизируются для соседних частей сплайнов).Чтобы достичь этого, нужно установить касательные в k
-й точке
m(k) = (1-c) * (P(k+1) - P(k-1)) / (t(k+1)-t(k-1))
, где с - напряжение, P(k)
- k
-ная точка набора данных, а t(k)
- это некотораяпараметр для нормализации.Иногда используются индексы (например, в более общих сплайнах Кочанека-Бартельса в качестве разности индексов используется знаменатель 2), иногда кумулятивное расстояние между точками - я подозреваю, что MS может использовать этот метод и т. Д.* в каждой точке набора данных (исключая начальные и конечные - здесь просто примените касательную, основанную на одном соседе) и постройте сплайны в форме (базисе) Эрмита.
Но для кривых Безье существует довольно простой метод де Кастельжау -поэтому мы можем выразить те же кривые в форме Безье (сменить базис на полиномы Бернштейна)Процитированная вики-страница показывает простой способ: начальная и конечная точки остаются прежними, а контрольные точки Безье равны
p0 (Bezier) = p0 (Hermite)
p3 (Bezier) = p1 (Hermite)
p1(Bezier) = p0(Hermite) + m0/3
p2(Bezier) = p1(Hermite) - m1/3