【发布时间】:2015-08-23 06:28:51
【问题描述】:
我想在 python 中绘制 3d 长方体。
输入: 中心(中心 3 分) 半径(3 个半径值,每个维度一个)
理想情况下它应该是一个线框图(我需要看看里面有什么)。我不完全确定如何去做。使用 python matplotlib 或 Mayavi 就可以了。
谢谢!
到目前为止,我已经尝试了以下代码..但只绘制了一个立方体
from mpl_toolkits.mplot3d import Axes3D
import matplotlib.pyplot as plt
import numpy as np
from itertools import product, combinations
fig = plt.figure()
ax = fig.gca(projection='3d')
ax.set_aspect("equal")
#draw cube
r = [-1, 1]
for s, e in combinations(np.array(list(product(r,r,r))), 2):
if np.sum(np.abs(s-e)) == r[1]-r[0]:
ax.plot3D(*zip(s,e), color="b")
plt.show()
此代码中缺少的是它只是一个立方体(不是长方体)并且它仅以 0 为中心(我实际上想提供中心)
经过一番思考,我想出了这个。这似乎是正确的。如果您认为它不正确,请告诉我...这是不安装 myavi、pygame、povray 的最简单方法(我很难在 ipython、conda、我的 windows 笔记本电脑上安装这些)
from mpl_toolkits.mplot3d import Axes3D
import matplotlib.pyplot as plt
import numpy as np
from itertools import product, combinations
fig = plt.figure()
ax = fig.gca(projection='3d')
ax.set_aspect("equal")
#draw cube
r1 = [-1, 1]
r2 = [-2, 2]
r3 = [-3, 3]
center =[5,5,5]
for s, e in combinations(np.array(list(product(r1,r2,r3))), 2):
s=np.array(center)+np.array(s)
e=np.array(center)+np.array(e)
ax.scatter3D(*center, color="r")
if np.linalg.norm(s-e) == 2*r1[1] or np.linalg.norm(s-e) == 2*r2[1] or np.linalg.norm(s-e) == 2*r3[1]:
print zip(s,e)
ax.plot3D(*zip(s,e), color="b")
plt.show()
【问题讨论】:
-
我试过这个链接...这仅适用于立方体stackoverflow.com/questions/11140163/… ....我不完全确定如何将其修改为一个长方体,其中我给出 3 个中心和 3 个半径
-
你能用代码的形式告诉我们你尝试过的更具体吗
-
我在问题中包含了我尝试过的代码。
标签: python plot mayavi wireframe