如何畫三維波函數圖像?

計算結果是一三維數組,phi(M, M, M)。即給定(i, j, k),有一個phi值,請問matlab裡面有沒有類似contourf、surf這樣適用於三維圖像的?不想畫等勢面之類的,就想以每個點的值作為顏色參數畫圖。


可以使用 scatter3 函數,不過,畫出來的結果很可能不夠理想,更好的選擇應該是使用 slice 函數來畫出關鍵面(平面或者曲面)。

舉個例子:

f(x,y,z) = x cdot exp(-x^2 - y^2 - z^2)

scatter3

[x, y, z] = meshgrid(-3:0.25:3);
f = x .* exp(-x.^2 - y.^2 - z.^2);
scatter3(x(:), y(:), z(:), [], f(:), .)

可以看到,中央部分有兩團隱隱約約的東西,但是根本看不清楚細節。這幅圖使用的點間距已經算是比較大了,點很稀疏,但是由於使用 3D 坐標,數據量仍然不小,我的電腦顯示這幅圖已經很卡了。slice

[x, y, z] = meshgrid(-3:0.1:3);
f = x .* exp(-x.^2 - y.^2 - z.^2);
slice(x, y, z, f, [], 0, 0)

這樣畫,細節就清楚多了。注意到,這幅圖使用的點間距也比上面一幅圖小了不少,但由於只有兩個平面,數據量很小,顯示在我的破電腦上也毫無壓力。

你也可以根據具體需求,任意改變切片的位置,數量,甚至也可以用曲面切片。具體的使用方法,請參考 Matlab 的幫助文檔。此外,這裡也有一個很不錯的視頻教程,推薦觀看。

參考:

  1. 3-D scatter plot
  2. Volumetric slice plot
  3. Basics: Volume visualization: 3/9 Display of scatter3 and slice plots


data = Table[{x, y, z,

100000 x*Exp[-x^2 - y^2 - z^2] + 0.35}, {x, -4.5, 4.5, 0.35}, {y, 0, 3.5, 0.3}, {z, -3.5, 3.5, 0.3}] //Flatten // Partition[#, 4] ;

scatter3D[data_] := Graphics3D[{PointSize[1/100], Opacity[.8],

Point[Most[data[Transpose]][Transpose],

VertexColors -&>

ColorData[{"LakeColors", "Reverse"}] /@

Last[data[Transpose]]]}, Axes -&> True];

scatter3D[data]

這樣的話顏色越深phi的值就越大,不過感覺效果不是很好。


打開下面這個鏈接就能找到很多內容

Human Verification

舉個例子

f[x_, y_, z_] = x Exp[-x^2 - y^2 - z^2];
Graphics3D[
Table[{Hue[f[x, y, z], 1, 1, Abs[f[x, y, z]]*2],
Point[{x, y, z}]}, {z, -3, 3, 0.2}, {y, -3, 3, 0.2}, {x, -3, 3,
0.2}] // Flatten]

畫出來有點兒不和諧啊分享一個例子

plotting - Is there something like DensityPlot3D to visualize atomic orbitals?


推薦閱讀:

加速度如何在頻域上積分成位移?
Matlab如何實現截屏與屏幕錄製
Eigen 矩陣運算庫在實際項目中的使用情況如何?
研究電力電子化電力系統穩定性的利器——阻抗法
[MATLAB]圖視篇(4)極致畫圖工具箱鼎力推薦

TAG:MATLAB | WolframMathematica |