2013-05-30 27 views
9

一個插值流暢的3D地塊該地塊由Mathematica創建:如何產生在Matlab

ls = Table[Sinc[x*y], {x, -5, 5, 0.2}, {y, -5, 5, 0.2}]; 
ListPlot3D[ls, InterpolationOrder -> 2, PlotRange -> All, 
Mesh -> None] 

enter image description here

如何創建MatLab中這樣的情節?

這裏是我的嘗試至今:

>> x=linspace(-5.,5.,51); 
>> y=linspace(-5.,5.,51); 
>> [x,y]=meshgrid(x,y); 
>> z=sinc(x.*y); 
>> surf(x,y,z) 
>> shading interp 

看起來非常不同,尤其是潺潺的細節。是否有可能製作出像Mathematica那樣的情節,尤其是平滑,陰影?

enter image description here

+0

好問題。請允許我只提一下這兩個專有程序的免費軟件,開源代碼:GNU Octave。至於「Mathematica」和「MATLAB」,我不知道。 – cfa45ca55111016ee9269f0a52e771

+1

您正在使用什麼版本的MATLAB?我得到一個[漂亮的情節](http://i.imgur.com/WzFHUgn.png)... –

+0

@EitanT我在Mac上使用2012a。但在你的情節中,牆上仍然有一些皺紋和線條。 – xslittlegrass

回答

13

爲了創建漂亮的燈光和陰影,你需要一個光添加到您的情節,並添加一些幾分面子照明。如果分辨率太低,那麼最終會出現一些不規則的情節,因爲'interp'樣式陰影使用線性插值。例如

n = 51; 
x=linspace(-5., 5., n); 
y=linspace(-5., 5., n); 
[x, y]=meshgrid(x, y); 
sinc = @(x) sin(x)./x; 
z=sinc(x.*y); 
z(isnan(z)) = 1; 
surf(x, y, z, 'LineStyle', 'none', 'FaceColor', 'interp') 
colormap(cool) 
camlight right 
set(gca, 'CameraPosition', [45 35 9.8]) 

產生以下

enter image description here

注意,如何使表面平滑出現涉及n。較大的值n將增加表面的平滑度。

如果產生的數據是昂貴創建,可以增加通過使用內插比線性的更高級形式的分辨率,如下

n = 51; 
x=linspace(-5., 5., n); 
y=linspace(-5., 5., n); 
[x, y]=meshgrid(x, y); 
sinc = @(x) sin(x)./x; 
z=sinc(x.*y); 
z(isnan(z)) = 1; 

nn = 401; 
xi = linspace(-5.0, 5.0, nn); 
yi = xi; 
[xi, yi] = meshgrid(xi, yi); 
zi = interp2(x, y, z, xi, yi, 'spline'); 
surf(xi, yi, zi, 'LineStyle', 'none', 'FaceColor', 'interp') 
colormap(cool) 
camlight right 
set(gca, 'CameraPosition', [45 35 9.8]) 

產生以下圖像

enter image description here

有關更多詳細信息,請參閱以下幫助頁面

+0

謝謝。但是,你可以嘗試我的功能,你的功能似乎已經很平穩。 – xslittlegrass

+0

我改變了我的答案,而不是使用你的功能。 – hoogamaphone

+0

謝謝,但我認爲我的問題是如何繪製現有矩陣,而不是增加矩陣中的點數,因爲在我的研究中,矩陣是使用其他非常昂貴的程序生成的。 – xslittlegrass

3

我建議嘗試衝浪/ surfl,並嘗試打開/關閉照明。初始相機位置也很重要,因爲我使用「前大燈」凸輪。

x=linspace(-5.,5.,51); 
y=linspace(-5.,5.,51); 
[x,y]=meshgrid(x,y); 
z=sinc(x.*y); 
surfl(x,y,z) %surf(x, y, z) 
shading interp 
colormap cool 
%camlight headlight 
%lighting gouraud 
+0

謝謝,是的,我已經檢查了你的答案,但在我的電腦上,它並沒有產生像問題一樣的平滑內插圖(我不確定這是否是版本問題)。 – xslittlegrass

+0

我喜歡「衝浪」+「照明」的輸出。另一個需要重新介入的問題,我沒有猜到 –