Python中的球面极坐标表面图

0 投票
1 回答
943 浏览
提问于 2025-04-30 05:05

我需要在一个球面极坐标图上绘制天线的响应模式。首先,我会创建一些角度值,分别叫做theta(t)和phi(p)。接下来,我需要为每一个theta[i]phi[i]计算出F_c和F_s。

t=np.linspace(-math.pi/2, math.pi/2, num=x)
p=np.linspace(-math.pi, math.pi, num=x)

for k in xrange(x):
    for j in xrange(x):
            for i in xrange(n):
                    F_c=F_c_F_s.F_c(theta[i],phi[i],t[j],p[k])
                    F_s=F_c_F_s.F_s(theta[i],phi[i],t[j],p[k])
                    sum_F_c[j][k]=sum_F_c[j][k]+F_c
                    sum_F_s[j][k]=sum_F_s[j][k]+F_s
                    mod_F[j][k]=math.log((math.pow(sum_F_c[j][k],2)+math.pow(sum_F_s[j][k],2)),10)

现在,对于每一个tp,我都有一个mod_F的值。接着,我会根据每个theta值和对应的phi值计算出笛卡尔坐标。然后,为了制作表面图,我有以下的代码:

fig = p.figure()
ax = Axes3D(fig)
ax.plot_wireframe(x,y,z)
ax.plot_surface(x,y,z,rstride=1,cstride=1,cmap=cm.jet)
p.show()

问题是,这个过程非常慢!即使是x=10,也就是一个10 x 10的网格,花费的时间也很长。有没有更好更快的方法来完成这个呢?

暂无标签

1 个回答

0

以下方法对我有效:

t=np.linspace(0, np.pi, num=x)
p=np.linspace(-np.pi,np.pi,num=x)
[T,P]=np.meshgrid(t,p)
F_c=0.0
F_s=0.0

for i in xrange(n):
    F_c+=F_c_F_s.F_c(theta[i],phi[i],T,P)
    F_s+=F_c_F_s.F_s(theta[i],phi[i],T,P)
mod_F=(np.log10((np.power(F_c,2)+np.power(F_s,2))))

撰写回答