学号
一、绘制FERGUSON 曲线
1,
改变各点处的一阶导数数值,绘制 FERGUSON 曲线进
行对比分析
A=[100,300;120,200;220,200;270,100;370,100;420, 200;420,300;220,280;100,300];
B=[10,-10;30,-30;30,-30;30,-10;20,20;20,20;-20, 20;-20,10;20,-20];
Q=[2,-2,1,1;-3,3,-2,-1;0,0,1,0;1,0,0,0]; plot(A(:,1),A(:,2)); [m,n]=size(A); hold on for i=1:m-1
for t=0:0.001:1 T=[tA3F2,t,1];
Px=[A(i,1),A(i+1,1),B(i,1),B(i+1,1)]; Py=[A (i, 2),A(i+1,2),B (i, 2),B(i+1,2)]; x=T*Q*Px : y=T*Q*Py' plot(x,y, 'r');
end end
2,FERGUSON 曲线丰满度实验
A=[100,300;120,200;220,200;270,100;370,100;420, 200;420,300;220,280;100,300]; B=[10,-10;30,-30;30,-30;30,-10;20,20;20,20;-20, 20;-20,10;20,-20];
C=[20,-20;60,-60;60,-60;60,-20;40,40;40,40;-40,
姓名 所使用的语言 MATLAB 完成日期
2016/5/9
截图部分
B=[10,-10;30,-30;30,-30;30,-10;20,20;2 0,20;-20,20;-20,10;20,-20];
B=[210,-210;230,-230;
230,-230;230,-210; 220,240;250,250;
-210,230;-220,210;220,-200];
40;-40,40;40,-40];
D=[40,-40;120,-120;120,-120;120,-40;80,80;80,80 ;-80,80;-80,80;80,-80];
Q=[2,-2,1,1;-3,3,-2,-1;0,0,1,0;1,0,0,0];
plot(A(:,1),A(:,2));
[m,n]=size(A);
hold on
for i=1:m-1
for t=0:0.001:1
T=[tA3F2,t,1];
Px=[A(i,1),A(i+1,1),B(i,1),B(i+1,1)];
Py=[A (i, 2),A(i+1,2),B (i, 2),B(i+1,2)];
x=T*Q*Px:
y=T*Q*Py:
Px1= [A(i,1),A(i+1,1),C(i,1),C(i+1,1)];
Py1=[A (i, 2),A(i+1,2),C(i,2),C(i+1,2)];
x1=T*Q*Px1';
y1=T*Q*Py1';
Px2=[A(i,1),A(i+1,1),D(i,1),D(i+1,1)];
Py2=[A (i, 2),A(i+1,2),D(i,2),D(i+1,2)];
x2=T*Q*Px2';
y2=T*Q*Py2';
plot(x,y, 'r');
plot(x1,y1, 'r');
plot(x2,y2, 'r');
end
end
二、绘制Bezier曲线
1、二次Bernstein基函数性质分析
三次Bernstein基函数性质分析
2、绘制任意二次三点Bezier曲线
x=[100 150 200 ];
y=[100 50 100 ];
plot(x,y, 'k' ,‘LineWidth' ,1); k=length(x);
for i=1:k-2
for t=0:0.005:1
Bx=(t A2-2*t+1)*x(1)+(-2*t A2+2*t)*x (2)+ (t A2)*x(3);
By=(t A2-2*t+1)*y(1)+(-2*t A2+2*t)* y(2)+
(t A2)* y(3);
hold on
plot(Bx,By, 'r' , 'LineWidth' ,2);
end
end
3、绘制三次七点Bezier曲线
clear all
hold on
B1=[100,300;120,200;220,200;270,100];
B2=[270,100;370,100;420,200;420,300]
plot(B1(:,1),B1(:,2), '-b');
plot(B2(:,1),B2(:,2), '-b');
for t=0:0.001:1
P=[t*t*t t*t t 1];
Q=[-1,3,-3,1;3,-6,3,0;-3,3,0,0;1,0,0,0];
P1=P*Q*B1;
plot(P1(:,1),P1(:,2), '.b' , 'markersize' ,10);
P1=P*Q*B2;
plot(P1(:,1),P1(:,2), '.b' , 'markersize' ,10); end
三、绘制B样条曲线
1、绘制均匀二次三点B样条曲线
x=[100 150 200 250 300 350 400 450 500];
y=[100 50 100 50 150 50 100 50 100];
plot(x,y, 'k' ,‘LineWidth' ,1);
k=length(x);B=1/2;
for i=1:k-2
for t=0:0.005:1
Bx=B*(tA2-2*t+1)*x(i)+B*(-2*L2+2*t+1)*x(i+1)+
B*(t A2)*x(i+2);
By=B*(t A2-2*t+1)*y(i)+B*(-2*t A2+2*t+1)*y(i+1)+
B*(t A2)*y(i+2);
hold on
plot(Bx,By, 'r' , 'LineWidth' ,2);
end
end
2、绘制三次B样条曲线
x=[100 120 220 270 370 420 420 ];
y=[300 200 200 100 100 200 300 ];
plot(x,y, 'k' , 'LineWidth' ,1);
k=length(x);B=1/6;
for i=1:k-3
for t=0:0.005:1
Bx=B*(-t A3+3*t A2-3*t+1)*x(i)+B*(3*t A3-6*t A2-0*t +4)*x(i+1)+ ... B*(-3*t A3+3*t A2+3*t+1)*x(i+2)+B*(1*t A3-0*t A2-0* t+0)*x(i+3);
By=B*(-t A3+3*t A2-3*t+1)*y(i)+B*(3*t A3-6*t A2-0*t +4)*y(i+1)+ ... B*(-3*t A3+3*t A2+3*t+1)*y(i+2)+B*(1*t A3-0*t A2-0* t+0)*y(i+3);
plot(Bx,By, end end
3、在同一控制顶点下(四个控制定点)绘制三次Bezier 曲线 和三次B 样条曲线
hold on
x=[220 270 300 320 340 360 370 420 ]; y=[200 100 150 150 150 150 100 200 ]; plot(x,y, '-b' , 'LineWidth' ,2); plot(x,y,
'*r'
, 'LineWidth'
,3);
k=length(x); B=1/6; for i=1:k-3
for t=0:0.001:1
Bx=B*(-t A 3+3*t A 2-3*t+1)*x(i)+B*(3*t A 3-6*t A 2-0*t +4)*x(i+1)+
...
B*(-3*t A 3+3*t A 2+3*t+1)*x(i+2)+B*(1*t A 3-0*t A 2-0* t+0)*x(i+3);
By=B*(-t A 3+3*t A 2-3*t+1)*y(i)+B*(3*t A 3-6*t A 2-0*t +4)*y(i+1)+
...
B*(-3*t A 3+3*t A 2+3*t+1)*y(i+2)+B*(1*t A 3-0*t A 2-0* t+0)*y(i+3);
plot(Bx,By, 'r'
, 'LineWidth' ,2);
end end
四、有理曲线绘制
绘制有理二次Bezier 曲线
x=[100 150 200 250 300 350 400 450 500]; y=[100 50 100 50 150 50 100 50 100]; plot(x,y, 'k'
, 'LineWidth' ,1);
k=length(x);B=1/2;
'r'
, 'LineWidth' ,2);
各种参数图形
for t=0:0.005:1
Bx=(B*(tA2-2*t+1)*x(i)+B*(-2*L2+2*t+1)*x(i+1)+
B*(tA2)*x(i+2))/(B*(tA2-2*t+1)+B*(-2*L2+2*t+1)
+…
B*(t A2));
By=(B*(t A2-2*t+1)*y(i)+B*(-2*t A2+2*t+1)*y(i+1)+
B*(t A2)*y(i+2))/(B*(t A2-2*t+1)+B*(-2*t A2+2*t+1)
+…
B*(t A2));
hold on
plot(Bx,By, 'r' , 'LineWidth' ,2);
end
end
均匀有理B样条曲线绘制有理三次B样条曲线hold on
各种参数图形x=[220 270 300 320 340 370 420 ];
y=[200 100 140 150 130 100 200 ];
plot(x,y, '-b' , 'LineWidth' ,2);
k=length(x); B=1/6;
for i=1:k-3
for t=0:0.001:1
Bx=(B*(-t A3+3*t A2-3*t+1)*x(i)+B*(3*t A3-6*t A2-0* t+4)*x(i+1)+ ...
B*(-3*t A3+3*t A2+3*t+1)*x(i+2)+B*(1*t A3-0*t A2-0* t+0)*x(i+3))/(B*(-
t A3+3*t A2-3*t+1)+B*(3*t A3-6*t A2-0*t+4)+ ...
B*(-3*t A3+3*t A2+3*t+1)+B*(1*t A3-0*t A2-0*t+0));
By=(B*(-t A3+3*t A2-3*t+1)*y(i)+B*(3*t A3-6*t A2-0* t+4)*y(i+1)+ ...
B*(-3*t A3+3*t A2+3*t+1)*y(i+2)+B*(1*t A3-0*t A2-0*