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

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

      AutoCAD是一款应用广泛的工程绘图软件,其中样条Spline曲线是使用频繁的功能之一。在计算机中,通过点取屏幕上面的点,并让一会曲线光顺的通过这几个点,这叫插值曲线。这就是Spline曲线的功能。那这个Spline曲线的数学公式又是什么样的呢?当我们知道了AutoCAD中的Spline样条表达公式,很多软件之间的Spline转换就变得更加简单。

      在研究这个之前,我们查阅了不少资料,很幸运我们发现Nurbs曲线被标准化组织,定义为唯一表达CAD曲线的标准函数公式。通过对Spline的分析,我们完全可以判定AutoCAD中的Spline样条曲线就是Nurbs类型曲线。

      关于Nurbs曲线已经是比较成熟的技术了,开放的函数库也比较多,如OpenNurbs。有时也可以自己写一个,如果不深入公式推导,只是写写程序,对于加深Nurbs的理解还是很有帮助的。Nurbs函数中有几个感念需要理解,一个是次数,如2次,3次。一般CAD软件中,直线可以用1次的Nurbs表示,圆弧可以用2次的Nurbs表示,样条就可以用3次的Nurbs表示。一般用变量K表示函数的次;还有一个就是节点矢量Knot Vector,节点矢量是计算基函数值的依据,它的取值方式,直接决定了曲线的样式。所以,节点矢量knot Vector是我们重点要研究的。下面收集了几种计算节点矢量的方法:

1.均匀参数化

使每个节点区间长度(用向前差分表示),即节点在参数轴上呈等距分布,为处理方便起见,常取成整数序列

    Ui = i    i=0,1,...,n

这种参数化法仅适合于数据点多边形各边 或者称弦 接近相等的场合。否则,在相邻段弦长相差悬殊的情况下,生成插值曲线后弦长较长的那段曲线显得扁平,弦长较短的那段曲线则膨得厉害,甚至出现尖点或打圈自交又称为三重点的情况。

2. 积累弦长参数化

这种参数化法如实反映了数据点按弦长的分布情况,一直被认为是最佳参数化法。它克服

了数据点按弦长分布不均匀情况下采用均匀参数化所出现的问题。在较多情况下能获得较满意的结果,即所得插值曲线具有较好的光顺性。弦长参数化法生成的插值曲线在某种程度上可看作为较好光顺性的解释。应该指出,插值曲线的光顺性不仅与数据点的参数化有关,还与所采用的插值法有关。当数据点取得足够密,且当插值法具有收敛性质,即加密数据点时插值曲线收敛到被插值曲线的性质时,将生成近似弧长参数化的插值曲线。但在工程实践中,都不希望费这样的麻烦,人们希望能够尽可能少但又足以表示形状的数据点,方便地生成所需要的曲线。

3.向心参数化

从积累弦长参数化法并不总能保证生成光顺的插值曲线出发,认为问题在于未考虑数据点的折拐情况。就像汽车在高速公路上行驶那样,司机驱车的安全性与舒适感取决于使向心速度在一定

界限内平稳地变换。由此他假设在一段曲线弧上的向心力与曲线切矢从该弧段始端至末端的转角成正比,加上其它一些简化假设,导出如上的参数化法,与积累弦长参数化法在计算上的差别,这里取成了弦长平方根的累计,故又称为平方根法。

计算节点矢量的方法还有Foley参数化等。

现在,回到AutoCAD中来,解决Nurbs的算法表示的样条曲线问题,重点是弄清楚它的节点矢量的计算公式。通过,多次的研究发现Spline采用三次曲线,为保证曲线通过首尾,并且在首尾处相切,使用K+1,也就是4重节点。并在节点矢量剩下的值,采用均匀参数化。

如:一个拥有n=7个控制点的Spline曲线。采用k=3次样条表示。

它的首端应该有0,0,0,0 ,末端应该有1,1,1,1,在节点矢量上,应该有m=n+k+1,也就是11=7+3+1个点,现在还需要计算节点矢量上中间的三个值(11-8=3),这三个点通过平分0-1之间的值,也就是1/4,2/4,3/4。这样完整的节点矢量应该是ui ={0,0,0,0,0.25,0.5,0.75,1,1,1,1}。

有了节点矢量,再计算Nurbs基函数的值,最后计算出在曲线上的坐标值。通过验算,这个算法完全符合在AutoCAD程序中,对Spline的函数表示。

你可能感兴趣的:(AutoCAD)