根据三点估算导数/Bessel Tangent方法

在曲线拟合问题中,通常需要根据已知曲线上的离散点,估算出曲线在端点处的导数,常用的一种导数估计方法称为“Bessel Tangent”方法。

已知点\(P_{i-1},P_i,P_{i+1}\),求一种导数估算算法,计算\(P_{i-1}^\prime,P_i^\prime,P_{i+1}^\prime\)。Bessel tangent 算法的主要思路是,插值一条通过三点的抛物线,然后通过计算抛物线上三点的导数的方式给出三点的估计导数。

1)参数化

首先确定三点的参数为$$ \left\{
\begin{aligned}
t_0 & = 0 \\
t_1 & = t_0+|P_{i-1}P_i| \\
t_2 & = t_1+|P_iP_{i+1}|
\end{aligned}
\right.
$$

2)\(P_i\)导数

令\(\triangle t_i = t_{i+1}-t_i;\triangle P_i= \frac{P_{i+1}-P_i}{\triangle t_i}\)$$P_i^\prime=\frac{\triangle t_i}{\triangle t_i+\triangle t_{i-1}}\triangle P_{i-1}+\frac{\triangle t_{i-1}}{\triangle t_i+\triangle t_{i-1}}\triangle P_i$$即\(P_i^\prime\)是\(\triangle P_{i-1}\),\(\triangle P_{i-1}\)的加权平均。

3)\(P_{i-1},P_{i+1}\)导数

$$P_{i-1}^\prime+P_i^\prime=2\triangle P_{i-1}$$因此$$P_{i-1}^\prime=2\triangle P_{i-1}-P_i^\prime \\P_{i+1}^\prime=2\triangle P_i-P_i^\prime $$

我对算法的C++实现是:

参考资料:

The Essentials of CAGD : Chapter 11 Working with B Spline Curves 

于谦. 基于切向约束的二次B样条插值曲线的研究[D]. 山东大学, 2009.

根据三点估算导数/Bessel Tangent方法》上有1条评论

  1. 即\(P_i^\prime\)是\(\triangle P_{i-1}\),\(\triangle P_{i-1}\)的加权平均

    应为

    即\(P_i^\prime\)是\(\triangle P_{i-1}\),\(\triangle P_{i}\)的加权平均

发表评论

电子邮件地址不会被公开。