我需要绘制一个3D点云(点数:N),然后从这些点生成一个凸包(实际上是一个具有N个顶点的多面体)。我用Python和Scipy库中的ConvexHull编写了一个脚本,可以绘制8个点和一个立方体。点云的绘图效果很好,但是立方体的绘图效果不好,因为代码除了边线外还在对角面上放置了两条线。我不明白为什么要绘制在面上的线。
脚本:
import numpy as np
from mpl_toolkits.mplot3d import Axes3D
import matplotlib.pyplot as plt
from scipy.spatial import ConvexHull
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
points= np.array([[0,0,0],
[4,0,0],
[4,4,0],
[0,4,0],
[0,0,4],
[4,0,4],
[4,4,4],
[0,4,4]])
hull=ConvexHull(points)
edges= zip(*points)
for i in hull.simplices:
plt.plot(points[i,0], points[i,1], points[i,2], 'r-')
ax.plot(edges[0],edges[1],edges[2],'bo')
ax.set_xlabel('x')
ax.set_ylabel('y')
ax.set_zlabel('z')
ax.set_xlim3d(-5,5)
ax.set_ylim3d(-5,5)
ax.set_zlim3d(-5,5)
plt.show()
脚本的结果: