在Python中生成随机三维形状

3 投票
2 回答
3828 浏览
提问于 2025-04-17 19:10

我想知道怎么用Python在一个图表里生成很多球体和椭圆体。理想情况下,我只需要设置每个物体的端点(或者半径/轴)和颜色,就像用端点轻松生成矩形和圆形那样。

我在想可以使用像matplotlib的3D模块,这样生成的图表可以旋转和调整。不过,我也愿意尝试其他库!

我可能可以通过操控和绘制一堆椭球方程来绘制这些物体的表面,但有没有更简单的方法呢?

2 个回答

1

你是在寻找一些matplotlibmpl_toolkits.mplot3d模块中没有的功能吗?在这个3D表面示例中:

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()
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

撰写回答