計算幾何B zier曲面繪製MATLAB實現

2021-10-01 08:16:20 字數 1751 閱讀 6530

給定控制頂點

繪製bézier曲面

%----------畫線----------

xs=[0 1 2;

0 1 2;

0 1 2];

ys=[0 0 0;

1 1 1;

2 2 2];

zs=[1 1.5 1;

1.5 1.7 1.5;

1 1.5 1];

hold on

x=[xs(1,1),xs(1,2)];

y=[ys(1,1),ys(1,2)];

z=[zs(1,1),zs(1,2)];

for i=1:3

for j=1:2

x=[xs(i,j),xs(i,j+1)];

y=[ys(i,j),ys(i,j+1)];

z=[zs(i,j),zs(i,j+1)];

plot3(x,y,z,'r','linewidth',2.5);

x=[xs(j,i),xs(j+1,i)];

y=[ys(j,i),ys(j+1,i)];

z=[zs(j,i),zs(j+1,i)];

plot3(x,y,z,'r','linewidth',2.5);

endend%----------畫點----------

xp=[0 1 2 0 1 2 0 1 2];

yp=[0 0 0 1 1 1 2 2 2];

zp=[1 1.5 1 1.5 1.7 1.5 1 1.5 1];

scatter3(xp,yp,zp,'b','filled')

%----------畫面----------

u=0:0.05:1;v=0:0.05:1; %這裡可以通過改變步長來調整控制網格的疏密

[u,v]=meshgrid(u,v);

d=length(u);

bu0=(1-u).^2; bu1=2.*u.*(1-u); bu2=u.^2;

bv0=(1-v).^2; bv1=2.*v.*(1-v); bv2=v.^2;

x=zeros(d);y=zeros(d);z=zeros(d);

bv=[bv0;bv1;bv2];bu=[bu0;bu1;bu2];

for i=1:3

for j=1:3

nj=d*(j-1)+1;

ni=d*(i-1)+1;

x=x+xs(i,j).*bu(nj:nj+(d-1),:).*bv(ni:ni+(d-1),:);

y=y+ys(i,j).*bu(nj:nj+(d-1),:).*bv(ni:ni+(d-1),:);

z=z+zs(i,j).*bu(nj:nj+(d-1),:).*bv(ni:ni+(d-1),:);

endendsurf(x,y,z)

axis off

執行結果如下

(這裡的**是用screentogif製作,十分簡潔快速,強烈安利)

這裡的函式寫的很傻……而且當控制頂點的數量改變,不是9個的時候,改動就十分的大,如果以後改良的話再寫……

計算幾何與計算幾何與

博主這裡曾經學過計算幾何 下文簡稱jj 所以沒有證明或者說明某些演算法,不適合初學者食用 用一道例題及黃學長的 來理解 黃學長 include include include include include include include include include include define...

計算幾何 幾何基礎

這章早在2017年寒假就在培訓的時候由來自清華的hta老師上過了 但是本蒟蒻那時候並不是懂的太多 所以這週ww老師又上了一遍 大概記錄一下 大概就跟高中必修4的平面向量差不多 有上過的應該都會 a x1,y1 b x2,y2 a b x1x2 y1y2 a b a b cos a,b 運用 若a與b...

caioj 計算幾何 面積 計算幾何 叉積

題意 在乙個平面座標系上隨意畫一條有n個點的封閉折線 按畫線的順序給出點的座標 保證封閉折線的任意兩條邊都不相交。最後要計算這條路線包圍的面積。用叉積有關知識解決。重要結論 abs 三點的叉積 2為這三點圍成的三角形的面積。簡要證明 上圖中,黑色的三角形面積為矩形 三個三角形,設數,計算,合併同類項...