当前位置:文档之家› 计算机图形学第二次实验报告

计算机图形学第二次实验报告

计算机图形学第二次实验报告
计算机图形学第二次实验报告

学号

一、绘制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*

相关主题
文本预览
相关文档 最新文档