2014-12-04 88 views
0

我遇到了與橢圓體繪製有關的問題。Python中的橢圓體創建

,我畫繪製橢圓體如下:

x**2/16 + y**2/16 + z**2/16 = 1. 

所以,我看到了很多關於計算和橢圓空洞的繪圖參考,並在多個問題笛卡爾球形或反之亦然計算被提及。

進入一個網站,有一個計算器,但我不知道如何成功執行此計算。此外,我不確定應該設置什麼空間。已經看到了我在那裏作爲默認的那些,但由於我沒有以前的經驗與這些庫,我真的不知道從它期望什麼。

from mpl_toolkits.mplot3d import Axes3D 
import matplotlib.pyplot as plt 
import numpy as np 

fig = plt.figure(figsize=plt.figaspect(1)) # Square figure 
ax = fig.add_subplot(111, projection='3d') 

multip = (1, 1, 1) 
# Radii corresponding to the coefficients: 
rx, ry, rz = 1/np.sqrt(multip) 

# Spherical Angles 
u = np.linspace(0, 2 * np.pi, 100) 
v = np.linspace(0, np.pi, 100) 

# Cartesian coordinates 

#Lots of uncertainty. 
#x = 
#y = 
#z = 

# Plot: 
ax.plot_surface(x, y, z, rstride=4, cstride=4, color='b') 

# Axis modifications 
max_radius = max(rx, ry, rz) 
for axis in 'xyz': 
    getattr(ax, 'set_{}lim'.format(axis))((-max_radius, max_radius)) 

plt.show() 

回答

2

你的橢圓體不只是一個橢球體,它是一個球體。

請注意,如果您使用下面爲x,y和z所寫的替換公式,您將得到一個標識。一般來說,在不同的座標系統(在這種情況下爲球面)上繪製這樣一個旋轉曲面一般比較容易,而不是試圖求解一個隱式方程(在大多數繪圖程序中,除非採取一些對策),否則這種方程會變成鋸齒狀。

from mpl_toolkits.mplot3d import Axes3D 
import matplotlib.pyplot as plt 
import numpy as np 

phi = np.linspace(0,2*np.pi, 256).reshape(256, 1) # the angle of the projection in the xy-plane 
theta = np.linspace(0, np.pi, 256).reshape(-1, 256) # the angle from the polar axis, ie the polar angle 
radius = 4 

# Transformation formulae for a spherical coordinate system. 
x = radius*np.sin(theta)*np.cos(phi) 
y = radius*np.sin(theta)*np.sin(phi) 
z = radius*np.cos(theta) 

fig = plt.figure(figsize=plt.figaspect(1)) # Square figure 
ax = fig.add_subplot(111, projection='3d') 
ax.plot_surface(x, y, z, color='b') 

enter image description here

+0

在我的任務,半徑在三種情況下都4。 如果不是'x ** 2/16',我有'12x ** 2'? 它會是'x =(np.sin(theta)* np.cos(phi))/ 12'嗎? – Divine 2014-12-07 14:32:44

+0

@Divine關閉,但你忘了平方根。這將是:'x =(np.sin(theta)* np.cos(phi))/ np.sqrt(12)'。只要確保通過替換這些轉換公式,最終得到一個標識('1 == 1')。 – 2014-12-07 14:48:08