gen_contour_nurbs_xld( : Contour : Rows, Cols, Knots, Weights, Degree, MaxError, MaxDistance : )
gen_contour_nurbs_xld生成一个近似于NURBS曲线(非均匀有理的B-Spline 曲线)的XLD轮廓。
NURBS曲线由它的度数Degree、一个控制多边形(Rows, Cols来表示)、一个权值向量 Weights和一个结向量Knots来指定。
曲线的度Degree决定了曲线的可微性等级。
该曲线位于其控制多边形(Rows, Cols)的凸包内。
Weights中的权重决定了曲线被各个控制点(Rows, Cols)吸引的程度。
如果选择“auto”,将生成一个对所有控制点具有相同权重的权重Weights向量。
节点向量Knots描述了曲线的域。
通常,这个参数可以设置为“auto”。
生成轮廓的精度取决于两个参数MaxDistance和MaxError。
MaxDistance限制两个边续轮廓点的最大距离。
生成的轮廓线与实际NURBS曲线之间的最大距离限制为MaxError。
默认情况下,近似拟合必须满足两个约束条件,但是可以将其中一个参数设置为忽略“omit”。
选择的MaxError, MaxDistance越小,曲线的逼近效果越好。
注意,所有Contour 上的点都精确地位于曲线上(除了数值不准确)。
NURBS曲线C的角度P定义为
N_{i,p} 定义为
所以每个NURBS曲线通过以下参数定义。
角度Degree p,
控制多边形P_{0},...,P_{n-1} (Rows, Cols)
权重w = (w_{0}, ..., w_{n-1}) (Weights)
节点向量u = (u_{0},..., u_{n+p}) (Knots)
例程dev_close_window ()
dev_open_window (0, 0, 512, 512, 'black', WindowHandle)
Rows := [150,160,130,140,180]
Cols := [50,200,300,400,450]
*用上面指定坐标点先生成交叉点。
gen_cross_contour_xld (Cross, Rows, Cols, 12, 0.785398)
*用上面坐标点生成NURBS曲线的控制数据
gen_nurbs_interp (Rows, Cols, [0,-10,0,10], 3, CtrlRows, CtrlCols, Knots)
*用控制数据生成MURB曲线
gen_contour_nurbs_xld (Contour, CtrlRows, CtrlCols, Knots, 'auto', 3, 1, 5)
dev_display (Contour)
dev_display (Cross)
|