Python 打印隐式定义体积的曲面

Python 打印隐式定义体积的曲面,python,3d,matplotlib,mayavi,Python,3d,Matplotlib,Mayavi,具有由隐式定义的卷 x*y*z <= 1 这导致了一个体积的等值面(对于x*y*z=1),这不是我想要的。我要找的基本上是一种绘制任意曲面的方法,如“3d多边形”,如果有这种东西的话 我创建了以下代码,用于绘制曲面(也适用于mayavi)。我需要修改这段代码来解决我的特殊问题,但要做到这一点,我需要理解为什么三维曲面由三个二维阵列定义,以及如何定义?这些数组(x、y和z)代表什么 import numpy as np from matplotlib import pyplot as p

具有由隐式定义的卷

x*y*z <= 1 
这导致了一个体积的等值面(对于x*y*z=1),这不是我想要的。我要找的基本上是一种绘制任意曲面的方法,如“3d多边形”,如果有这种东西的话

我创建了以下代码,用于绘制曲面(也适用于mayavi)。我需要修改这段代码来解决我的特殊问题,但要做到这一点,我需要理解为什么三维曲面由三个二维阵列定义,以及如何定义?这些数组(
x
y
z
)代表什么

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

phi, theta = np.mgrid[0:np.pi:11j, 0:2*np.pi:11j]
x = np.sin(phi) * np.cos(theta)
y = np.sin(phi) * np.sin(theta)
z = np.cos(phi)

fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
ax.plot_wireframe(x,y,z)
fig.show()
定义函数
test\u mesh()
的测试用例能够生成球体。这是通过替换

r = sin(m0*phi)**m1 + cos(m2*phi)**m3 + sin(m4*theta)**m5 + cos(m6*theta)**m7
r=1.0
表示

但是,您的问题是您需要了解,当您要绘制球体时,您正在编写的方程式定义了体积。你需要重新格式化它们,以给出一个球体的参数方程。这基本上就是在上面的例子中所做的,但是您自己尝试一下可能是值得的。作为一个提示,考虑一个圆的方程并展开它。 定义函数
test\u mesh()
的测试用例能够生成球体。这是通过替换

r = sin(m0*phi)**m1 + cos(m2*phi)**m3 + sin(m4*theta)**m5 + cos(m6*theta)**m7
r=1.0
表示


但是,您的问题是您需要了解,当您要绘制球体时,您正在编写的方程式定义了体积。你需要重新格式化它们,以给出一个球体的参数方程。这基本上就是在上面的例子中所做的,但是您自己尝试一下可能是值得的。作为一个提示,考虑一个圆的方程并展开它。 外表面,由

x*y*z = 1,
无法全局显式定义。要看到这一点,考虑X和Y给出,然后:

z = 1/(x*y),
未为
x=0
y=0
定义。因此,您只能为不包含奇点的域(例如域)局部定义曲面

0 < x <= 5
0 < y <= 5
请注意,曲面未定义为
x=0
y=0
,即坐标系的轴,因此无法将曲面拼接在一起以获得全局定义的曲面

使用
numpy
matplotlib
,可以按如下方式绘制其中一个曲面(采用自):


我不熟悉
mayavi
,但我认为使用
numpy
创建网格的工作原理相同。

外表面由

x*y*z = 1,
无法全局显式定义。要看到这一点,考虑X和Y给出,然后:

z = 1/(x*y),
未为
x=0
y=0
定义。因此,您只能为不包含奇点的域(例如域)局部定义曲面

0 < x <= 5
0 < y <= 5
请注意,曲面未定义为
x=0
y=0
,即坐标系的轴,因此无法将曲面拼接在一起以获得全局定义的曲面

使用
numpy
matplotlib
,可以按如下方式绘制其中一个曲面(采用自):


我不熟悉
mayavi
,但我认为使用
numpy
创建网格也会有同样的效果。

那么,您尝试了什么?如果你表明你做了一些研究,至少在发帖前试过,你会在这里得到更好的答案。你的问题目前读作“请为我做我的工作”(即使这不是你的意图),这往往会激怒人们,使他们不太可能回答你的问题。我已经阅读了mayavi网站上的示例,例如,但是曲面是显式定义的。您是否尝试过显式求解隐式定义,即在x、y、z范围内定义域,然后为每个域绘制显式曲面?好的,让我们看看您尝试过的代码(即使它不起作用)。好的,我用过的代码在这里没有多大帮助,但我将回到这里(希望今天)并将展示我的最佳尝试。会有人碰巧知道一个(或一些)了解
np.meshgrid
np.mgrid
的不同用例的好资源,最好是这样的例子?那么,你尝试了什么?如果你表明你做了一些研究,至少在发布之前尝试过,你会在这里得到更好的答案。你的问题目前是“请为我做我的工作”(即使这不是你的意图)这往往会让人们感到恼火,从而使他们不太可能回答您的问题。我已经阅读了mayavi网站上的示例,例如,上面的演示,但曲面是明确定义的。您是否尝试过明确解决您的隐式定义,即定义x、y、z内的域,然后为每个域绘制一个明确的曲面域?好的,让我们看看你尝试过的代码(即使它不起作用)好吧,我的代码在这里不会有太大帮助,但我会回到这里(希望今天)并展示我的最佳尝试。会有人碰巧知道一个(或一些)吗了解
np.meshgrid
np.mgrid
的不同用例的好资源,最好是这样的例子?我不想画一个球体,但是
x*y*zMy定义的体积表面表示歉意,我在回答之前没有正确理解这个问题。@Ludo提供了一个更好的答案,其中解决您的问题。我建议您首先尝试在2D中绘制边界,以了解问题。aestrivex,感谢您非常有用的评论…并且感谢@Greg,这确实是一个非常好的想法,我将尝试。我不想绘制球体,但由
x*y*zMy定义的体积曲面表示歉意,我没有正确理解回答之前请先回答问题。@Ludo提供了一个更好的答案来解决您的问题。我建议您