B样条曲线的绘制_样条曲线

B样条曲线的绘制_4s_02


%四个控制点B样条曲线的生成
%四个控制点
c=[0 1 2 3;0 1 1 0];
s=0:0.01:1; %归一化路程0=<s<=1
%四个样条函数
f1s=(1-s).^3/6;
f2s=(3*s.^3-6*s.^2+4)/6;
f3s=(-3*s.^3+3*s.^2+3*s+1)/6;
f4s=s.^3/6;
ps=c(:,1)*f1s+c(:,2)*f2s+c(:,3)*f3s+c(:,4)*f4s;
figure(1)
plot(c(1,:),c(2,:),'r*',ps(1,:),ps(2,:),'b','LineWidth',2);
legend('控制点','B样条曲线')
title('四个控制点及其B样条曲线')
grid on

B样条曲线的绘制_自动驾驶_03

%五个控制点B样条曲线的生成
%五个控制点
c=[0 1 2 3 4;0 1 0 1 0];
s=0:0.01:1;
%四个样条函数
f1s=(1-s).^3/6;
f2s=(3*s.^3-6*s.^2+4)/6;
f3s=(-3*s.^3+3*s.^2+3*s+1)/6;
f4s=s.^3/6;
%计算两个样条曲线,个数为控制点的个数减3
p1s=c(:,1)*f1s+c(:,2)*f2s+c(:,3)*f3s+c(:,4)*f4s;
p2s=c(:,2)*f1s+c(:,3)*f2s+c(:,4)*f3s+c(:,5)*f4s;
figure(1)
plot(c(1,:),c(2,:),'r*',p1s(1,:),p1s(2,:),'b',p2s(1,:),p2s(2,:),'c','LineWidth',2);
legend('控制点','第一段','第二段')
title('五个控制点及其B样条曲线')
grid on

B样条曲线的绘制_自动驾驶_04

%N个控制点B样条曲线的生成
%N个控制点
c=[0 1 2 -2 -1 0;0 0.3 2.5 2.5 4.7 5];
s=0:0.01:1;
N=length(c); %控制点数目
%四个样条函数
f1s=(1-s).^3/6;
f2s=(3*s.^3-6*s.^2+4)/6;
f3s=(-3*s.^3+3*s.^2+3*s+1)/6;
f4s=s.^3/6;
figure(1)
mycolor='mbc';
plot(c(1,:),c(2,:),'r*');
hold on
%绘制控制点及B样条曲线
for i=1:N-3
p=c(:,i)*f1s+c(:,i+1)*f2s+c(:,i+2)*f3s+c(:,i+3)*f4s;
plot(p(1,:),p(2,:),...
mycolor(mod(i,3)+1),'LineWidth',2);
end
title('N个控制点及其B样条曲线')
grid on;
hold off

B样条曲线的绘制_样条_05

B样条曲线的绘制_样条_06

B样条曲线的绘制_4s_07


 中国大学MOOC智能机器人系统:

https://www.icourse163.org/learn/NUDT-1205969803?tid=1462903468#/learn/announce