给定(m+1)(n+1)个空间向量 P i , j ∈ R 3 P_{i,j}in{R^3} Pi,j∈R3 ( i = 0 , 1 , . . . , m , j = 0 , 1 , . . . , n ) (i = 0,1,...,m, j = 0,1, ... , n) (i=0,1,...,m,j=0,1,...,n) B i m ( u ) , B j n ( v ) B^{m}_{i}(u),B^{n}_{j}(v) Bim(u),Bjn(v)为Bernstein基函数。曲面
P ( u , v ) = ∑ i = 0 m ∑ j = 0 n B i m ( u ) B j n ( v ) , ( u , v ) ∈ [ 0 , 1 ] × [ 0 , 1 ] . P(u,v) = sum^m_{i=0}sum^n_{j=0}B^{m}_{i}(u)B^{n}_{j}(v) ,(u,v) in [0,1] times [0,1] . P(u,v)=i=0∑mj=0∑nBim(u)Bjn(v),(u,v)∈[0,1]×[0,1].
称为一个 m × n m times n m×n 次Bezier曲面, P i , j P_{i,j} Pi,j称为控制顶点 . 依次用直线段连接同行同列相邻两个控制点所得的 m × n m times n m×n 边折线网格称为 Bezier 网 (简称B网) 或者 控制网格 。
以下是张量积型的Bezier曲面的简单编程 ,张量积型的Bezier曲面的性质的一些编程之后看小编水平吧!
function bezier_surf%张量积型的bezier曲面a = 0;b = 1;N = 10;M = 10;hx = (b-a)/N;hy = (b-a)/M;x = (a:hx:b)'; %x:[0,1]区间N等分得到的向量y = (a:hy:b)'; %y:[0,1]区间M等分得到的向量n = 2;m = 2;a = 0;b = 1;N = 10;M = 10;hx = (b-a)/N;hy = (b-a)/M;x = (a:hx:b)'; %x:[0,1]区间N等分得到的向量y = (a:hy:b)'; %y:[0,1]区间M等分得到的向量n = 2;m = 2;Px=[4,4,4;2,2,2;0,0,0]; %给的坐标值Py=[0,2,4;0,2,4;0,2,4];Pz=[0,2,0;2,4,2;0,2,0];% Py = [1,1,1;2,2,2;3,3,3]; %给的第二组坐标 % Px = [1,2,3;1,2,3;1,2,3];% Pz = [1,3,1;3,5,3;1,3,1];plot3(Px,Py,Pz,'b','linewidth',1.2);hold on;plot3(Px',Py',Pz','b','linewidth',1.2);hold on;plot3(Px,Py,Pz,'mo','linewidth',1.2);hold on;PZ = zeros(N+1,M+1);PX = PZ;PY = PZ;for i = 1:n+1 for j = 1:m+1 PX = PX + Px(i,j)*B_f(x,y,n,m,i-1,j-1); PY = PY + Py(i,j)*B_f(x,y,n,m,i-1,j-1); PZ = PZ + Pz(i,j)*B_f(x,y,n,m,i-1,j-1); endendsurf(PX,PY,PZ)endfunction z = B_f(x,y,n,m,N,M) %n:n次bernstein基函数;m:m次bernstein基函数[x,y] =meshgrid(x,y); %N:n次bernstein基函数中取B(n,N)z = B(x,n,N).*B(y,m,M);endfunction y = B(x,n,i)y = k(n,i).*(x.^i).*((1-x).^(n-i));endfunction y = k(n,i)y1 = factorial(n); %n的阶乘y2 = factorial(i)*factorial(n-i);y = y1/y2;end%%一开始用的这个坐标,结果一直出错,后来才发现给的点后面调用的时候所有点在一个平面上% P = [4,0,0;4,2,2;4,4,0;... %九个点的坐标% 2,0,2;2,2,4;2,4,2;...% 0,0,0;0,2,2;0,4,0];% px = P(:,1);% Px = reshape(px,3,3); %将九个点的横坐标写成一个矩阵% py = P(:,2);% Py = reshape(py,3,3);% pz = P(:,1);% Pz = reshape(pz,3,3);% A = zeros(9,3);% A(:,1) = px;% A(:,2) = py;% A(:,3) = pz; 3. Bezier曲面的性质(临近考试,懒得一个个敲上去了,直接上照片)