AutoCAD中的Spline曲线算法分析(二)

AutoCAD中的Spline曲线算法分析(二)

by eattonton

AutoCAD中的样条曲线(命令是Spline),是通过用户输入型值点之后,软件的插值计算,得到一条样条曲线。这条曲线的数学表达式是一条B样条曲线。这里就涉及一个样条曲线的反算计算。

B样条曲线的组成主要有一下各个方面:

1.             控制点,这是一个凸多边形。拟合出来的曲线,就在这个凸多边形里面生成。

2.             节点矢量,是一个范围Ui。计算的方法已经在上一篇文章中有详细说明。

3.             基函数,基函数的选择基本上都是使用Deboor-Cox递推公式。

在工程项目中基本上都是使用2次和3次B样条。AutoCAD中默认的就是3次样条曲线。上面讲的是曲线的正算过程,也就是知道控制点,节点矢量,基函数以及需要的次数。就能计算出这条曲线。样条曲线的反算过程,就麻烦的多。这这里我们明确我们需要计算的目标是什么:

题:已知几个型值点(Pi, i=1,2,3…n),曲线采用3次B样条插值。计算出该B样条曲线的所有参数。

下面我们按照正常的解数学题目的方式来反算题目。

解:

1.    节点矢量的计算

节点矢量的计算上篇文章已经说了,这里我们仍然采用累积弦长法。

2.    首末端点切线的确定

型值点的个数为n,需要计算的样条曲线为k次,那么控制点的数量就是 m=n+k-1, 在这里就是 m=n+2.

在首末端点,我们设定

V1 = P1,  Vn+2 = Pn  (Vi 就是控制点,有n+2个)

由于P1,Pn就是给定的型值点,为已知无需求解。剩下的等式就变成n-2个,却还需求解n个控制点。所以,我们在首末端点设置两个条件。

2.1           在已知首末切矢的情况下,有存在这样的等式

dP1 = 3*(V2-V1) = 3*V2 – 3*P1         --> 3*V2 = dP1 + 3*P1

dPn=3*(Vn+2-Vn+1)=3*Pn-3*Vn+1    --> 3*Vn+1 =3*Pn-dPn

其中dP1,dPn表示在P1和Pn点处的一阶导数

2.2           不知道切矢,就认为是自由端条件的情况下

6*P1 = 9*V2 -3*V3

6*Pn = -3*Vn + 9*Vn+1

3.    其他方程的计算

对于型值点内部的点,如果建立公式呢。可以通过节点矢量上面的间隔点作为输入值,计算系数矩阵,从而与型值点建立等式。

有了前面的准备,控制点就是一个解线型方程组的过程。这里不再赘述。

通过AutoCAD里面的模拟,我们的算法能够得到正确的结果。说明我们的算法对于软件的理解是正确的。

B样条曲线在项目的线型光顺中是一个很基础的概念,也是一个很重要的概念。如果后面有时间我想把散乱点的拟合,曲线光顺性的计算等也写一下。

你可能感兴趣的:(AutoCAD,计算几何)