Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/280.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python中由体素构成的椭球体_Python_Voxel_Mplot3d - Fatal编程技术网

Python中由体素构成的椭球体

Python中由体素构成的椭球体,python,voxel,mplot3d,Python,Voxel,Mplot3d,我需要在python中用体素制作一个椭球体,但我仍然不完全理解如何定义这个图形的边界。我见过一些例子,其中他们使用布尔运算来定义体素,但我无法使它按我希望的方式工作。任何帮助都将不胜感激 这就是我一直在尝试的: import matplotlib.pyplot as plt import numpy as np from mpl_toolkits.mplot3d import Axes3D from mpl_toolkits.mplot3d.art3d import Poly3DCollecti

我需要在python中用体素制作一个椭球体,但我仍然不完全理解如何定义这个图形的边界。我见过一些例子,其中他们使用布尔运算来定义体素,但我无法使它按我希望的方式工作。任何帮助都将不胜感激

这就是我一直在尝试的:

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

fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')

# the angles and radius
u = np.linspace(0, 2 * np.pi, 100)
v = np.linspace(0, np.pi, 100)
radius = 4

# equations for the shell of the ellipsoid
X = 3*radius*np.sin(v)*np.cos(u)
Y = 2*radius*np.sin(v)*np.sin(u)
Z = radius*np.cos(v)


x, y, z = np.indices((10, 10, 10))
voxels = (x <= X) | (y <= Y) | (z <= Z)
ax.voxels(voxels)

plt.show()

---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-12-f0d9033151c5> in <module>
     14 
     15 x, y, z = np.indices((10, 10, 10))
---> 16 voxels = (x <= X) | (y <= Y) | (z <= Z)
     17 ax.voxels(voxels)
     18 

ValueError: operands could not be broadcast together with shapes (10,10,10) (100,)
导入matplotlib.pyplot作为plt
将numpy作为np导入
从mpl_toolkits.mplot3d导入Axes3D
从mpl_toolkits.mplot3d.art3d导入Poly3DCollection
图=plt.图()
ax=图添加_子图(111,投影='3d')
#角度和半径
u=np.linspace(0,2*np.pi,100)
v=np.linspace(0,np.pi,100)
半径=4
#椭球壳的方程
X=3*半径*np.sin(v)*np.cos(u)
Y=2*半径*np.sin(v)*np.sin(u)
Z=半径*np.cos(v)
x、 y,z=np.指数((10,10,10))

体素=(x您可以使用meshgrid过滤到等间距栅格上椭球体内的点,然后对这些点应用布尔遮罩:

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

fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')

# grid points in spherical coord:
N = 40
R = 1
x,y,z = np.meshgrid(np.linspace(-R, R, N), np.linspace(-R, R, N),np.linspace(-R, R, N))

# filter points outside ellipsoid interior:
mask = (2*x)**2 + (3*y)**2 + z**2 <= R**2
x = x[mask]
y = y[mask]
z = z[mask]


# convert to cartesian for plotting:

ax.scatter3D(x,y,z)
ax.set_xlim(-1.2,1.2)
ax.set_ylim(-1.2,1.2)
ax.set_zlim(-1.2,1.2)
plt.show()
导入matplotlib.pyplot作为plt
将numpy作为np导入
从mpl_toolkits.mplot3d导入Axes3D
图=plt.图()
ax=图添加_子图(111,投影='3d')
#球坐标中的网格点:
N=40
R=1
x、 y,z=np.meshgrid(np.linspace(-R,R,N),np.linspace(-R,R,N),np.linspace(-R,R,N))
#椭球体内部外部的过滤点:

遮罩=(2*x)**2+(3*y)**2+z**2,如果必须绘制多个点(超过~500个点),我建议您以绘图方式签出
plotly
,因为它会快得多。您可以在此处看到示例代码:这并不是我所需要的,我需要用体素制作椭球体,并且体素也在内部。您需要绘制此图,还是只想定义这些点?