[终稿]Matlab 画二次及三次Bezier曲线,8控制点的B样条曲线
二次Bezier曲线代码:
m-文件函数:
function bezier2(p0,p1,p2)
t=0:0.001:1;
x=(p2(1)-2*p1(1)+p0(1))*t.^2+2*(p1(1)-p0(1))*t+p0(1); y=(p2(2)-2*p1(2)+p0(2))*t.^2+2*(p1(2)-p0(2))*t+p0(2); plot([p0(1) p1(1) p2(1)],[p0(2) p1(2) p2(2)],'b'),hold on plot(x,y,'r');
执行:
>> bezier2([1,3],[4,18],[7,6])
18
16
14
12
10
8
6
4
21234567
三次Bezier曲线代码:
function bezier3(p0,p1,p2,p3)
t=0:0.001:1;
x=(1-t).^3*p0(1)+3*t.*(1-t).^2*p1(1)+3*t.^2.*(1-t)*p2(1)+t.^3*p3(1);
y=(1-t).^3*p0(2)+3*t.*(1-t).^2*p1(2)+3*t.^2.*(1-t)*p2(2)+t.^3*p3(2);
plot([p0(1) p1(1) p2(1) p3(1)],[p0(2) p1(2) p2(2) p3(2)],'b');
hold on;
plot(x,y,'r');
执行:
>> bezier3([0,3],[5,20],[7,2],[9,1])
20
18
16
14
12
10
8
6
4
2
00123456789
B样条曲线代码(方法一):
function Byangtiao8(p)
t=0:0.005:1;
hold on
for i=1:5
x=p(1,i)*(1/6)*(-t.^3+3*t.^2-3*t+1)+p(1,i+1)*(1/6)*(3*t.^3-6*t.^2+4)...
+p(1,i+2)*(1/6)*(-3*t.^3+3*t.^2+3*t+1)+p(1,i+3)*(1/6)*t.^3;
y=p(2,i)*(1/6)*(-t.^3+3*t.^2-3*t+1)+p(2,i+1)*(1/6)*(3*t.^3-6*t.^2+4)...
+p(2,i+2)*(1/6)*(-3*t.^3+3*t.^2+3*t+1)+p(2,i+3)*(1/6)*t.^3;
plot(x,y,'k');
end
plot([p(1,1) p(1,2) p(1,3) p(1,4) p(1,5) p(1,6) p(1,7) p(1,8)],[p(2,1) p(2,2)
p(2,3) p(2,4) p(2,5) p(2,6) p(2,7) p(2,8)]);
执行:
>> Byangtiao8([4,6,3,1,7,9,15,11;0,9,11,15,15,7,6,12])
15
10
5
0051015
B样条曲线代码(方法二):
function Byt8(p0,p1,p2,p3,p4,p5,p6,p7) t=0:0.001:1;
%m=[-1 3 -3 1;3 -6 3 0;-3 0 3 0;1 4 1 0];
x=p0(1)*(1/6)*(-t.^3+3*t.^2-3*t+1)+p1(1)*(1/6)*(3*t.^3-6*t.^2+4)...
+p2(1)*(1/6)*(-3*t.^3+3*t.^2+3*t+1)+p3(1)*(1/6)*t.^3; y=p0(2)*(1/6)*(-t.^3+3*t.^2-3*t+1)+p1(2)*(1/6)*(3*t.^3-6*t.^2+4)...
+p2(2)*(1/6)*(-3*t.^3+3*t.^2+3*t+1)+p3(2)*(1/6)*t.^3; %plot([p0(1) p1(1) p2(1) p3(1)],[p0(2) p1(2) p2(2) p3(2)]); hold on;
plot(x,y,'r');
x=p1(1)*(1/6)*(-t.^3+3*t.^2-3*t+1)+p2(1)*(1/6)*(3*t.^3-6*t.^2+4)...
+p3(1)*(1/6)*(-3*t.^3+3*t.^2+3*t+1)+p4(1)*(1/6)*t.^3; y=p1(2)*(1/6)*(-t.^3+3*t.^2-3*t+1)+p2(2)*(1/6)*(3*t.^3-6*t.^2+4)...
+p3(2)*(1/6)*(-3*t.^3+3*t.^2+3*t+1)+p4(2)*(1/6)*t.^3; %plot([p0(1) p1(1) p2(1) p3(1)],[p0(2) p1(2) p2(2) p3(2)]); hold on;
plot(x,y,'r');
x=p2(1)*(1/6)*(-t.^3+3*t.^2-3*t+1)+p3(1)*(1/6)*(3*t.^3-6*t.^2+4)...
+p4(1)*(1/6)*(-3*t.^3+3*t.^2+3*t+1)+p5(1)*(1/6)*t.^3; y=p2(2)*(1/6)*(-t.^3+3*t.^2-3*t+1)+p3(2)*(1/6)*(3*t.^3-6*t.^2+4)...
+p4(2)*(1/6)*(-3*t.^3+3*t.^2+3*t+1)+p5(2)*(1/6)*t.^3; %plot([p0(1) p1(1) p2(1) p3(1)],[p0(2) p1(2) p2(2) p3(2)]); hold on;
plot(x,y,'r');
x=p3(1)*(1/6)*(-t.^3+3*t.^2-3*t+1)+p4(1)*(1/6)*(3*t.^3-6*t.^2+4)...
+p5(1)*(1/6)*(-3*t.^3+3*t.^2+3*t+1)+p6(1)*(1/6)*t.^3; y=p3(2)*(1/6)*(-t.^3+3*t.^2-3*t+1)+p4(2)*(1/6)*(3*t.^3-6*t.^2+4)...
+p5(2)*(1/6)*(-3*t.^3+3*t.^2+3*t+1)+p6(2)*(1/6)*t.^3; %plot([p0(1) p1(1) p2(1) p3(1)],[p0(2) p1(2) p2(2) p3(2)]); hold on;
plot(x,y,'r');
x=p4(1)*(1/6)*(-t.^3+3*t.^2-3*t+1)+p5(1)*(1/6)*(3*t.^3-6*t.^2+4)...
+p6(1)*(1/6)*(-3*t.^3+3*t.^2+3*t+1)+p7(1)*(1/6)*t.^3; y=p4(2)*(1/6)*(-t.^3+3*t.^2-3*t+1)+p5(2)*(1/6)*(3*t.^3-6*t.^2+4)...
+p6(2)*(1/6)*(-3*t.^3+3*t.^2+3*t+1)+p7(2)*(1/6)*t.^3; %plot([p0(1) p1(1) p2(1) p3(1)],[p0(2) p1(2) p2(2) p3(2)]);
hold on;
plot(x,y,'r');
plot([p0(1) p1(1) p2(1) p3(1) p4(1) p5(1) p6(1) p7(1)],[p0(2) p1(2) p2(2) p3(2)
p4(2) p5(2) p6(2) p7(2)]);
执行:
>> Byt8([0,0],[1,4],[3,9],[5,7],[6,2],[7,6],[9,5],[11,3])
9
8
7
6
5
4
3
2
1
0024681012
本文档为【[终稿]Matlab 画二次及三次Bezier曲线,8控制点的B样条曲线】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑,
图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。