2014-12-21 87 views
1

我試圖在R^3中的立方體上看到3個參數的函數,以獲得函數平滑的想法。該問題的一個例子示於以下示例代碼使用matplotlib繪製給定域上的三維圖形函數

%pylab 
from mpl_toolkits.mplot3d import Axes3D 
import itertools 

x = np.linspace(0,10,50) 
y = np.linspace(0,15,50) 
z = np.linspace(0,8,50) 

points = [] 
for element in itertools.product(x, y, z): 
    points.append(element) 

def f(vals): 
    return np.cos(vals[0]) + np.sin(vals[1]) + vals[2]**0.5 

fxyz = map(f, points) 
xi, yi, zi = zip(*points) 

fig = plt.figure(figsize=(12, 8)) 
ax = fig.add_subplot(111, projection='3d') 
ax.scatter(xi, yi, zi, c=fxyz, alpha=0.5) 
plt.show() 

cube

這種方法的問題是,立方體的內部不能被可視化。是否有更好的方法來繪製R^3的某個密集子集上的函數?

+2

我建議你使用Mayavi的。 – HYRY

+1

如前所述,爲Mayavi使用其他軟件是更好的選擇。可以使用的兩種技術是:等速面繪製和體繪製。 – nicoguaro

+0

@HYRY謝謝,這正是我所期待的 – mgilbert

回答

4

由於@HYRY和@nicoguaro在上面的評論中提出,Mayavi更適合這種類型的工作。有一組很好的例子我用作參考。以下是我想出了

import numpy as np 
from mayavi import mlab 

x = np.linspace(0,10,50) 
y = np.linspace(0,15,50) 
z = np.linspace(0,8,50) 

X, Y, Z = np.meshgrid(x, y, z) 

s = np.cos(X) + np.sin(Y) + Z**0.5 
b1 = np.percentile(s, 20) 
b2 = np.percentile(s, 80) 
mlab.pipeline.volume(mlab.pipeline.scalar_field(s), vmin=b1, vmax=b2) 
mlab.axes() 
mlab.show() 

這之後,我旋轉的數字與圖形用戶界面所需的角度和保存所需的意見

angle1 angle2

相關問題