首页 > 编程知识 正文

matlab 张量积,bezier曲线matlab代码

时间:2023-05-03 14:27:13 阅读:225698 作者:4598

1. 张量积型的Bezier曲面的定义

       给定(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∑m​j=0∑n​Bim​(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网) 或者 控制网格

2. 编程示例

       以下是张量积型的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曲面的性质

(临近考试,懒得一个个敲上去了,直接上照片)



版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。