3 B样条曲线的绘制
根据B样条曲线的定义公式,曲线上任一点坐标值是参数变量u的函数,用矩阵形式表示
只需要确定控制顶点 di、曲线的次数 k 以及基函数 Ni,k(u),就完全确定了曲线。
代码4:B样条曲线的绘制函数:
- % DrawSpline.m文件
- function DrawSpline(n, k, P, NodeVector)
- % B样条的绘图函数
- % 已知n+1个控制顶点P(i), k次B样条,P是2*(n+1)矩阵存控制顶点坐标, 节点向量NodeVector
- plot(P(1, 1:n+1), P(2, 1:n+1),...
- 'o','LineWidth',1,...
- 'MarkerEdgeColor','k',...
- 'MarkerFaceColor','g',...
- 'MarkerSize',6);
- line(P(1, 1:n+1), P(2, 1:n+1));
- Nik = zeros(n+1, 1);
- for u = 0 : 0.005 : 1-0.005
- for i = 0 : 1 : n
- Nik(i+1, 1) = BaseFunction(i, k , u, NodeVector);
- end
- p_u = P * Nik;
- if u == 0
- tempx = p_u(1,1);
- tempy = p_u(2,1);
- line([tempx p_u(1,1)], [tempy p_u(2,1)],...
- 'Marker','.','LineStyle','-', 'Color',[.3 .6 .9], 'LineWidth',3);
- else
- line([tempx p_u(1,1)], [tempy p_u(2,1)],...
- 'Marker','.','LineStyle','-', 'Color',[.3 .6 .9], 'LineWidth',3);
- tempx = p_u(1,1);
- tempy = p_u(2,1);
- end
- end
说明:调用 DrawSpline(n, k, P, NodeVector) 函数就能绘制曲线,注意输入变量要正确。