我想绘制单位球体x^2+y^2+z^2=1&;我正在尝试使用sympy、numpy和matplotlib实现同样的功能。 下面是一段代码片段:
x,y = sp.symbols('x y')
def g(x,y):
return sqrt(1-x**2 - y**2)
xrange2 = np.linspace(-1, 1, 100)
yrange2 = np.linspace(-1, 1, 100)
X2, Y2 = np.meshgrid(xrange2, yrange2)
Z2 = g(X2, Y2)
Z2[(1- X2**2 - Y2**2 < 0)] = np.nan
Z2[(1- X2**2 - Y2**2 > 0)] = np.nan
ax.plot_surface(X2, Y2, Z2,cmap='Blues', antialiased=True, edgecolor='black')
我不希望对球体使用参数方程,而是使用x、y和z绘制它。 当前正在获取以下错误: Z包含NaN值。这可能会导致渲染瑕疵
从这个问题来看,很不清楚使用的是哪个版本的
sqrt
。Sympy的sqrt
当然不会起作用math.sqrt
在数组上不起作用。只有np.sqrt
可以工作。但是,函数g
需要进行numpy矢量化np.sqrt
在数组上工作,在负数上操作时给出NaN
ax.plot_surface
不希望在某些Z值为NaN时绘制彩色贴图面,在这种情况下,它只绘制普通颜色。请注意,抗锯齿不适用于打印面,仅适用于边要绘制完整的球体,需要同时绘制
Z2
和-Z2
由于
NaN
和一个不定义均匀分布点的方程,会出现一些瑕疵。此外,表面不会完全填满。请参见this post以通过角度表示绘制球体注意,代码中并没有真正使用sympy(def
g(x,y)
使用标准Python变量x和y的自己版本)。此外,混合使用numpy和sympy也不起作用This related post通过sympy将曲面打印为参数曲面。请注意,这些参数化曲面仅适用于2个变量,在这种情况下,x、y和z定义为φ和θ的函数。据我所知,绘制一个通用的3D方程目前不适用于Symphy相关问题 更多 >
编程相关推荐