我正在画一个平行六面体。实际上,我从python脚本开始绘制立方体:
import numpy as np
from mpl_toolkits.mplot3d import Axes3D
import matplotlib.pyplot as plt
points = np.array([[-1, -1, -1],
[1, -1, -1 ],
[1, 1, -1],
[-1, 1, -1],
[-1, -1, 1],
[1, -1, 1 ],
[1, 1, 1],
[-1, 1, 1]])
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
r = [-1,1]
X, Y = np.meshgrid(r, r)
ax.plot_surface(X,Y,1, alpha=0.5)
ax.plot_surface(X,Y,-1, alpha=0.5)
ax.plot_surface(X,-1,Y, alpha=0.5)
ax.plot_surface(X,1,Y, alpha=0.5)
ax.plot_surface(1,X,Y, alpha=0.5)
ax.plot_surface(-1,X,Y, alpha=0.5)
ax.scatter3D(points[:, 0], points[:, 1], points[:, 2])
ax.set_xlabel('X')
ax.set_ylabel('Y')
ax.set_zlabel('Z')
plt.show()
为了得到一个平行六面体,我将点矩阵乘以以下矩阵:
P =
[[2.06498904e-01 -6.30755443e-07 1.07477548e-03]
[1.61535574e-06 1.18897198e-01 7.85307721e-06]
[7.08353661e-02 4.48415767e-06 2.05395893e-01]]
如:
Z = np.zeros((8,3))
for i in range(8):
Z[i,:] = np.dot(points[i,:],P)
Z = 10.0*Z
然后,我的想法是表示如下:
ax.scatter3D(Z[:, 0], Z[:, 1], Z[:, 2])
ax.set_xlabel('X')
ax.set_ylabel('Y')
ax.set_zlabel('Z')
plt.show()
这就是我得到的
然后,我如何在这些不同的点上放置曲面来形成平行六面体(以上面的立方体的方式)?
4条答案
按热度按时间brtdzjyr1#
使用3D PolyCollection打印曲面(example)
gwbalxhn2#
鉴于这个问题的标题是“python draw 3D cube”,这是我在谷歌上搜索这个问题时找到的文章。
对于那些和我做同样的事情的人,他们只是想画一个立方体,我已经创建了以下函数,它需要立方体的四个点,首先是一个角,然后是与该角相邻的三个点。
然后绘制立方体。
函数如下:
给出结果:
egdjgwm83#
请参阅我的另一个答案(https://stackoverflow.com/a/49766400/3912576)以获得更简单的解决方案。
这里有一组更复杂的函数,它们使matplotlib的扩展性更好,并且总是强制输入为立方体。
传递给cubify_cube_definition的第一个参数是起始点,第二个参数是第二个点,立方体长度从这个点开始定义,第三个是旋转点,它将被移动以匹配第一个和第二个的长度。
其产生以下结果:
3htmauhk4#
使用matplotlib和坐标几何完成