function MyDeCasAlg()
%本程序是一个执行Bezier曲线的递推算法
CtrlPs = PickCtrlPs();%交互式选取点作为曲线的控制顶点
i=1;%初始化计数器的值
for u=0:0.02:1%按照步长依次取密化参数值
AllCtrlPs = DeCasteljauAlg(CtrlPs,u);
N = length(AllCtrlPs);
DensePs(1,i) = AllCtrlPs{N}(1);
DensePs(2,i) = AllCtrlPs{N}(2);
%最后一个细胞中的点就是曲线上对应于参数u的点,最为密化点保存
if(i==30)
AllCtrlPs0 = AllCtrlPs;%保存i=30时的递推点便于后面绘图
%说明一个特定参数下的递推过程
end
i=i+1;
end
hold on
plot(DensePs(1,:),DensePs(2,:))%采用密化点绘制Bezier曲线
N = length(AllCtrlPs0)-1;
%对于i=30对应的参数u绘制各级递推点
%奇数层级和偶数层级采用不同颜色表示以便图形的直观
for i=1:N
if(mod(i,2)==1)
plot(AllCtrlPs0{i}(1,:),AllCtrlPs0{i}(2,:),'r','linewidth',1)
else
plot(AllCtrlPs0{i}(1,:),AllCtrlPs0{i}(2,:),'g','linewidth',1)
end
end
%
i=N+1;
plot(AllCtrlPs0{i}(1,:),AllCtrlPs0{i}(2,:),'k.','MarkerSize',12)%夸张显示最后一个递推点
hold off
box on %显示坐标轴包围盒
>> Bezier
>> Bezie2
>> MyDeCasAlg
这几个程序的运行需要交互选取控制顶点点击左键选点,点击右键在选点的同时结束选点过程。 Bezie2构造两条Bezier曲线
所以执行两次选点过程。MyDeCasAlg执行时不绘制顶点,所在在选择两个点后才会看到线段。