2013-01-10 71 views
1

我想要求社區幫助創建一個帶有顏色映射但類似Mathematica的類似Matlab的3D衝浪圖。爲了使問題更具體的讓我們說,我們有一組數字,在三維空間和每個點的一些函數值c asigned:像mathematica中的色彩圖一樣的Matlab衝浪嗎?

{{x1,y1,z1,c1},{x2,y2,z2,c2},...,{xN,yN,zN,cN}} 

這些點在3D例如表面上鋪設一個球體。現在,在MATLAB如果這些點被正確表示爲矩陣XYZC我們可以simpliy情節這個表面

k = 5; 
n = 2^k-1; 
[x,y,z] = sphere(n); 
c = magic(2^k); 
surf(x,y,z,c); 
colormap gray 
axis equal 

這裏有可以讀取該劇情感謝的函數值什麼是重要的彩條。

我們社會的問題是:

我們可以生產在數學這樣的情節(用彩條 - 這是重要的組成部分)???

我在網上搜索了一個解決方案,但沒有運氣。我看了諸如ListPlot3D,ListSurfacePlot3D,ListPointPlot3D之類的東西,但是對於這些函數,只能傳遞沒有相應的點值的曲面(除非有我不明白的地方)。

有沒有人知道一個解決方案,一種在Wolfram Mathematica中創建這種情節的方法?

回答

2

您可以使用ColorFunction指定,好,色彩功能:

ParametricPlot3D[{Sin[t] Cos[f], Sin[t] Sin[f], Cos[t]}, {t, 0, Pi}, {f, 0, 2 Pi} , 
ColorFunction -> Function[{x, y, z, t, f}, RGBColor[z]]] 

plot

另一種方法是使用的紋理;我將使用您使用其他軟件生成的數據。

{x, y, z, c} = Import["/tmp/sphere.mat"]; 

我們希望應用質地c(實際上旋轉90度)

ArrayPlot[c] 

texture

ParametricPlot3D[{Sin[t] Cos[f], Sin[t] Sin[f], Cos[t]}, {t, 0, Pi}, {f, 0, 2 Pi}, 
    PlotStyle -> Texture[ Rotate[ArrayPlot[c], Pi/2]], Lighting -> "Neutral"] 

sphereM

+0

謝謝b.gatessucks的答覆和有趣的解雖然我必須說Matlab解決方案更方便(至少對我而言)。再次感謝! – daved

+0

我必須說我認爲紋理的例子是理所當然的。仔細觀察它可以發現它並不能解決問題,實際上它可能會產生誤導。問題在於ArrayPlot [c]圖中包含也映射在球體上的黑色框架。如果將此答案的最後一個圖形圍繞z軸旋轉180度,則可以看到縫製或拼接效果。對於簡單的c = {{1,1,1},{2,2,2},{3,3,3}}來說,這更加明顯。解決這個問題的辦法是轉動黑框或在不同的程序中創建一個圖形(但這會產生更多的複雜性)。 – daved