相关知识参考这篇文章,其中已经提供了python代码和C++代码,本文只提供matlab代码。
一阶Beizer
二阶Beizer
二阶Beizer matlab代码
clc;clear; close all;
p1=[5,5];
p2=[10,20];
p3=[30,10];
figure('Position',[100,100,640,480]);
hold on;
plot([p1(1),p2(1)],[p1(2),p2(2)],'k-','MarkerFaceColor','k');
plot([p2(1),p3(1)],[p2(2),p3(2)],'k-','MarkerFaceColor','k');
axis equal;
axis([5,30,5,20]);
for t=0:0.001:1
p12=p1+t*(p2-p1);
p23=p2+t*(p3-p2);
line=plot([p12(1),p23(1)],[p12(2),p23(2)],'g-','LineWidth',1);
p123=p12+t*(p23-p12);
plot(p123(1),p123(2),'ro','MarkerSize',1);
title(['二阶Beizer曲线 t=',num2str(t)]);
drawnow;
delete(line);
end
三阶Beizer曲线
clc;clear;close all;
p=[0,0;5,10;15,15;20,5];
figure('Position',[150,150,600,480]);
axis equal;
axis([0,20,0,15]);
hold on;
for i=1:3
plot([p(i,1),p(i+1,1)],[p(i,2),p(i+1,2)],'k-');
end
for t=0:0.001:1
p12=(1-t)*p(1,:)+t*p(2,:);
p23=(1-t)*p(2,:)+t*p(3,:);
p34=(1-t)*p(3,:)+t*p(4,:);
line(1)=plot([p12(1),p23(1)],[p12(2),p23(2)],'b-','LineWidth',1);
line(2)=plot([p23(1),p34(1)],[p23(2),p34(2)],'b-','LineWidth',1);
p123=(1-t)*p12+t*p23;
p234=(1-t)*p23+t*p34;
line(3)=plot([p123(1),p234(1)],[p123(2),p234(2)],'g-','LineWidth',1);
P3=(1-t)*p123+t*p234;
plot(P3(1),P3(2),'ro','MarkerFaceColor','r','MarkerSize',1);
title(['三阶Beizer曲线 t=',num2str(t)]);
drawnow;
delete(line);
end
n阶Beizer曲线
matlab代码
function beizerPoint=BeizerN(node,t) %node:控制点 n:阶数
n=size(node,1)-1;
result=[0,0];
for i=0:n
result=result+factorial(n)/(factorial(i)*factorial(n-i))*(1-t)^(n-i)...
*t^i*node(i+1,:);
end
beizerPoint=result;
end
clc;clear;close all;
p=[0,0;5,14;9,18;10,20;12,18;15,12;20,0];
figure;
hold on;
scatter(p(:,1),p(:,2),'k','filled');
for i=1:size(p,1)-1
plot([p(i,1),p(i+1,1)],[p(i,2),p(i+1,2)],'k-');
end
for t=0:0.001:1
beizerPoint=BeizerN(p,t);
plot(beizerPoint(1),beizerPoint(2),'ro','MarkerSize',1);
drawnow;
end
close(v);