三次非均匀B样条曲面的绘制

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

%%%%%%%%%%三次非均匀B样条曲面的绘制

clc

clf

clear

A=input('请输入控制点:')%16个控制顶点要求以列向量表示点的坐标[2 3 4 5 2 3 4 5 2 3 4 5 2 3 4 5;2 2 2 2 3 3 3 3 4 4 4 4 5 5 5 5;1 2 3 1 3 4 6 2 7 5 6 2 9 1 3 4];

n=input('请输入所需绘制B样条曲线的次数:');

Vx=[A(1,1:4);A(1,5:8);A(1,9:12);A(1,13:16)];%将控制顶点的x坐标放到维数为4的方阵中

V y=[A(2,1:4);A(2,5:8);A(2,9:12);A(2,13:16)];%将控制顶点的y坐标放到维数为4的方阵中Vz=[A(3,1:4);A(3,5:8);A(3,9:12);A(3,13:16)];%将控制顶点的z坐标放到维数为4的方阵中plot3(A(1,:),A(2,:),A(3,:),'o');%输出控制顶点

hold on

syms u

syms w

P_uwx=[0];

P_uwy=[0];

P_uwz=[0];

for i=1:1:4;

for j=1:1:4

u0=0;u1=0;u2=0;u3=0;u4=1;u5=1;u6=1;u7=1;%给定4个控制顶点所取的节点矢量

B1=(u4-u3-u)^3/((u4-u3)*(u4-u2)*(u4-u1));

B2=((u3-u1+u)*(u4-u3-u)^2)/((u4-u3)*(u4-u2)*(u4-u1))+((u5-u3-u)*(u4-u3-u)*(u3-u2+u))/((u5-u 2)*(u4-u3)*(u4-u2))+((u5-u3-u)^2*u)/((u5-u3)*(u5-u2)*(u4-u2));

B3=((u4-u3-u)*(u3-u2+u)^2)/((u5-u2)*(u4-u3)*(u4-u2))+((u5-u3-u)*u*(u3-u2+u))/((u5-u3)*(u5-u2)*(u4-u3))+((u6-u3-u)*u^2)/((u6-u3)*(u5-u3)*(u4-u3));

B4=u^3/((u6-u3)*(u5-u3)*(u4-u3));

B=[B1;B2;B3;B4];%三次非均匀B样条基函数矩阵(自由曲线曲面造型技术139页)

w0=0;w1=0;w2=0;w3=0;w4=1;w5=1;w6=1;w7=1;%给定4个控制顶点所取的节点矢量

C1=(w4-w3-w)^3/((w4-w3)*(w4-w2)*(w4-w1));

C2=((w3-w1+w)*(w4-w3-w)^2)/((w4-w3)*(w4-w2)*(w4-w1))+((w5-w3-w)*(w4-w3-w)*(w3-w2 +w))/((w5-w2)*(w4-w3)*(w4-w2))+((w5-w3-w)^2*w)/((w5-w3)*(w5-w2)*(w4-w2));

C3=((w4-w3-w)*(w3-w2+w)^2)/((w5-w2)*(w4-w3)*(w4-w2))+((w5-w3-w)*w*(w3-w2+w))/((w 5-w3)*(w5-w2)*(w4-w3))+((w6-w3-w)*w^2)/((w6-w3)*(w5-w3)*(w4-w3));

C4=w^3/((w6-w3)*(w5-w3)*(w4-w3));

C=[C1;C2;C3;C4];%三次非均匀B样条基函数矩阵

Puwx=Vx(i,j)* B(i)*C(j);%控制顶点的x坐标与两个方向的基函数做乘积

Puwy=V y(i,j)* B(i)*C(j);

Puwz=Vz(i,j)* B(i)*C(j);

P_uwx=P_uwx+Puwx;%得到曲面的x坐表关于u,w的表达式(自由曲线曲面造型技术146页)

P_uwy=P_uwy+Puwy;%得到曲面的y坐表关于u,w的表达式

P_uwz=P_uwz+Puwz;%得到曲面的z坐表关于u,w的表达式

end

end

%%%%%%%%%%%%%%%%%%%%%%%%曲面的绘制

X1=zeros(11);Y1=zeros(11);Z1=zeros(11);%形成11维0矩阵

i=1;j=1;

for m=0:1/10:1;

for n=0:1/10:1;

X=subs(P_uwx,{u,w},{m,n});%P=subs(P,{u,w},{m,n})就是把P表达式中所有u,w都用具体的m,n值代替

Y=subs(P_uwy,{u,w},{m,n});

Z=subs(P_uwz,{u,w},{m,n});

X1(i,j)=X;%将X的值放入11维的方阵

Y1(i,j)=Y;

Z1(i,j)=Z;

j=j+1;

end

j=1;

i=i+1;

end

grid;

surf(X1,Y1,Z1);

hold on

输出结果:

图1.三次非均匀曲面图

相关文档
最新文档