根據花瓶的側面投影圖,用Matlab繪制花瓶的三維立體圖


現有一花瓶側面投影如圖       

問題:

1)    做出該花瓶三維立體圖;

2)    計算其表面積;

    計算其體積。

 

  第一次參加數學建模,從來沒有接觸過Matlab語言,一上來就碰到這種數字圖像處理的問題就懵了。完全是一邊摸索,一邊自學Matlab語言,一遍又一遍的在機子上調試。出錯了就改;運行不同了就調試.....異常辛苦。在這之前只會C/C++語言,而且這兩種語言還只停留在書本上,沒有編程經驗。所以在參加建模以前頗費了思量,下了一番決心。以前篤信一句名言——“機會是留給有准備的人的”,當時那句名言寫在中學的一塊標志牌上,所以記得很清楚。這句話乍看一下沒有錯,但仔細想想,你會發現一個問題。如果你每次都因為沒有准備好,而拒絕嘗試,放棄機會,你怎么能知道自己需要准備什么,怎么會提高呢?退一步講,即使第一次你失敗了,但你有了這次經歷,有了經驗,知道了自己的不足,知道了自己還需要准備什么,你就可以在心里對自己說,“我還會回來的,明年再戰”。從這個角度講,你就是贏家。

  總結起來就是一句話“年輕人,不要害怕失敗,不要拒絕嘗試”。

 

  閑話少說,切入正題。

  數字圖像在計算機中使用數字(0~255)表示的,對上圖中的花瓶來講,圖中陰影部分用‘0’表示,空白部分用‘1’表示。一個自然而然的想法就是利用這個特點,找出花瓶邊緣的坐標,然后擬合出一條曲線(本文使用三次樣條曲線擬合花瓶側面輪廓曲線),剩下的交給Matlab就可以了。對於表面積和體積,可以采用梯形法數值積分的方法。

源程序:

clear
X=imread('t1.bmp');
[m,n]=size(X);
A=[];A1=[];A2=[];k1=1;k2=1;

%尋找花瓶的最上面坐標
for j=1:n
for i=1:m
if X(i,j)==0
A1(k1)=i;k1=k1+1;
break;
end
end
end
n1=min(A1);
%尋找花瓶的最下面坐標
for j=1:n
for i=m:-1:1
if X(i,j)==0
A2(k2)=i;k2=k2+1;
break;
end
end
end
n2=max(A2);
%讀出花瓶左側輪廓的y坐標
for i=1:m
for j=1:n
if X(i,j)==0
A(i)=j;
break;
end
end
end
%%
%繪制三維立體圖
x1=n1:n2;
x=n1:1:n2;
y=spline(x1,A(x1),x);
[X,Y,Z]=cylinder(520-y,60);
mesh(X,Y,Z)

%計算體積
vi=pi*(y-520).^2;
V=trapz(x,vi)

%計算表面積
for i=1:1:n2-n1+1
if i<n2-n1+1
drtay(i)=y(i+1)-y(i);
else
drtay(i)=0;
end
end
si=2*pi*(520-y)./2.*sqrt(1+drtay.^2);
S=trapz(x,si)+pi*38*38

rotate3D on;
set(gca,'zdir','reverse');

 

三維立體圖如下:

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM