我想在python中绘制3d立方体。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上,畅达,我的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()
我试过这个链接...这只是一个多维数据集http://stackoverflow.com/questions/11140163/python-matplotlib-plotting-a-3d-cube-a-sphere-and-a-vector ....我不完全确定如何修改它是一个长方体,我给3个中心和3个半径 – mathopt
你可以通过以代码的形式告诉我们你已经试过的更具体的方法 – aestrivex
我包含了代码在这个问题上尝试过。 – mathopt