python函数输出三维坐标_三维打印:柱坐标函数

我要画一个在极坐标系下的函数。在

首先,我设置径向(r)和极轴(phi)变量的值。在pi=np.pi

r=np.linspace(0,4,30)

phi=np.linspace(0,2*pi,10)

然后我做A0(r,phi),其中A0是我写的一个函数,它对r和phi的每个值都有一个实值。在

我的存储方式是A0[r,phi]。这意味着“行”表示径向坐标,“列”表示极坐标。在

如果我在r中使用n值,在phi中使用m值,A0是一个(n,m)矩阵,或者(n,m)形状的numy数组。(在我的示例中,它是一个(30,10)numpy数组)

‘A0’似乎能正常工作,但问题是我不知道如何去策划它。在

我在尝试类似的事情:

^{pr2}$

试图遵循matplotlib的例子,但是它说形状不一致,因为它的尺寸有问题(在X,Y和A0之间)。在

有什么想法吗??在

如果我这样做,效果很好:fig = pyplot.figure(figsize=(11,7), dpi=100)

ax = pyplot.subplot(111, projection='3d')

for j, rn in enumerate(r):

for k, phin in enumerate(phi):

ax.scatter(rn*np.cos(phin), rn*np.sin(phin), A0[j,k],',b')

但我要的是曲面图或线状图,而不是散点图。在

以下是完整代码:import numpy as np

from scipy.special import binom as binom

from mpl_toolkits.mplot3d import Axes3D

from matplotlib import pyplot

from matplotlib import cm

import matplotlib

%matplotlib inline

'''Define A_(pm) (Gauss-laguerre polinomials) '''

def Ln(p,m,xj):

Ln=0.

for i in range(p+1):#el p+1 es por la indexacion

Ln=Ln+((-1)**i)*binom(p+m,p-i)*(xj**i)/np.math.factorial(i)

return Ln

def A(p, m, r, phi):#defino G-L

A0=np.zeros((len(r),len(phi)))

for j, rn in enumerate(r):

A0[j]=np.exp(-rn**2)*Ln(p,0,2*rn**2)

A1=np.zeros((len(r),len(phi)))

for j, rn in enumerate(r):

for k, phin in enumerate(phi):

A1[k,j]=2*((2*rn**2)**(m/2))*np.sqrt(np.math.factorial(p)/np.math.factorial(p+m))*np.exp(-rn**2)*Ln(p,m,2*(rn**2))*np.sin(m*phin)

A2=np.zeros((len(r),len(phi)))

for j, rn in enumerate(r):

for k, phin in enumerate(phi):

A2[k,j]=2*(2*rn**2)**(m/2)*np.sqrt(np.math.factorial(p)/np.math.factorial(p+m))*np.exp(-rn**2)*Ln(p,m,2*rn**2)*np.cos(m*phin)

return A0, A1, A2

pi=np.pi

r=np.linspace(0,6,50)

phi=np.linspace(0,2*pi,50)

A0, A1, A2=A(5,1,r,phi)#i think a have a bugs with the values of m .

fig = pyplot.figure(figsize=(11,7), dpi=100)

ax = pyplot.subplot(111, projection='3d')

for j, rn in enumerate(r):

for k, phin in enumerate(phi):

#ax.scatter(rn*np.cos(phin), rn*np.sin(phin), A0[j,k],'.b')

ax.scatter(rn*np.cos(phin), rn*np.sin(phin), A1[j,k],'.r')

#ax.scatter(rn*np.cos(phin), rn*np.sin(phin), A2[j,k],'.r')

这很管用,但我不想要分散。

这是我试图做的,但是如果r和phi有不同的维度,它就行不通了。在fig = pyplot.figure(figsize=(11,9), dpi=100)

ax = pyplot.subplot(111, projection='3d')

R, P = np.meshgrid(r, phi)

X, Y = R*np.cos(P), R*np.sin(P)

print 'shape r=', np.shape(r)

print 'shape R=', np.shape(R)

print 'shape P=', np.shape(P)

A0, A1, A2=A(5,0,R[1],R[0])

ax.plot_surface(X, Y, np.transpose(A0), rstride=3, cstride=3, cmap=pyplot.get_cmap('viridis'))


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部