Beizer(贝塞尔曲线)matlab

        相关知识参考这篇文章,其中已经提供了python代码和C++代码,本文只提供matlab代码。

一阶Beizer

        P=(1-t)p_{0}+tp_{1}

二阶Beizer

        P=(1-t)^{2}*p_{0}+2t(1-t)p_{1}+t^{2}p_{2}

二阶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曲线

P=(1-t)^{3}p_{0}+3(1-t)^{2}tp_{1}+3(1-t)t^{2}p_{2}+t^{3}p_{3} 

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);

 

  • 21
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值