用Python生成随机的3D形状

3
如何使用Python在一个图中生成一堆球和椭圆?理想情况下,只需要设置每个对象的端点(或半径/轴)和颜色,就像您可以使用端点轻松生成矩形/圆形一样。我想象使用类似于matplotlib的3-D模块,在输出后可以旋转和操作图。但我也可以使用其他库!通过操作和绘制大量椭球方程,我可能可以将方程作为表面绘制,但是否有更简单的解决方案?
2个回答

3
VPython可能是将球体和椭球体快速呈现在屏幕上的最简单方法。此外,VPython比matplotlib更加交互(您可以旋转、缩放等),而且很容易上手。最终,这取决于您想要什么。有很多方法可以在屏幕上显示球体和椭球体。
from visual import *
myell = ellipsoid(pos=(x0,y0,z0), length=L, height=H, width=W) 

enter image description here

ball = sphere(pos=(1,2,1), radius=0.5)

enter image description here


1

您是否在寻找在matplotlibmpl_toolkits.mplot3d模块中未包含的功能?从3D Surface demo中查看:

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

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

u = np.linspace(0, 2 * np.pi, 100)
v = np.linspace(0, np.pi, 100)

x = 10 * np.outer(np.cos(u), np.sin(v))
y = 10 * np.outer(np.sin(u), np.sin(v))
z = 10 * np.outer(np.ones(np.size(u)), np.cos(v))
ax.plot_surface(x, y, z, rstride=4, cstride=4, color='b')

plt.show()

我认为你完全可以在同一字段中定义另一个形状。
from mpl_toolkits.mplot3d import Axes3D
from matplotlib import cm
import matplotlib.pyplot as plt
import numpy as np

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

u = np.linspace(0, 2 * np.pi, 100)
v = np.linspace(0, np.pi, 100)

x = 10 * np.outer(np.cos(u), np.sin(v))
y = 10 * np.outer(np.sin(u), np.sin(v))
z = 10 * np.outer(np.ones(np.size(u)), np.cos(v))
x1 = 7 + 10 * np.outer(np.cos(u), np.sin(v))
y1 = 7 + 10 * np.outer(np.sin(u), np.sin(v))
z1 = 7 + 10 * np.outer(np.ones(np.size(u)), np.cos(v))

ax.plot_surface(x, y, z, rstride=4, cstride=4, color='b')
ax.plot_surface(x1, y1, z1, rstride=4, cstride=4, cmap=cm.coolwarm)

plt.show()

嗯,我不太确定你在这里做什么(它看起来有点像球坐标),你是在参数化一个球体并绘制它吗?然后你会改变系数来绘制不同的形状? - kennysong
1
@jellyksong:我来回答这个问题,因为看起来MattDMo不会回答... 这不是真正的球坐标系,而是笛卡尔坐标系中的一组圆。请注意,对于任何特定的z值,您都会得到一个通过球体的切片,它只是一个圆。这些就是那些圆。它似乎是从这里获取的:http://matplotlib.org/examples/mplot3d/surface3d_demo2.html - tom10
1
@tom10 - 感谢您澄清,很抱歉我离开了一会儿。是的,示例是从我包含的链接中获取的。我会在答案中更清楚地表明这一点。 - MattDMo
@jellyksong - 我在上面更新了我的答案,加入了第二个球体。 - MattDMo

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接