假设您已经使用 构造了凸包scipy.spatial.ConvexHull,则返回的对象应该具有点的位置,因此质心可能很简单,
import numpy as np
from scipy.spatial import ConvexHull
points = np.random.rand(30, 2) # 30 random points in 2-D
hull = ConvexHull(points)
#Get centoid
cx = np.mean(hull.points[hull.vertices,0])
cy = np.mean(hull.points[hull.vertices,1])
Run Code Online (Sandbox Code Playgroud)
您可以按如下方式绘制,
import matplotlib.pyplot as plt
#Plot convex hull
for simplex in hull.simplices:
plt.plot(points[simplex, 0], points[simplex, 1], 'k-')
#Plot centroid
plt.plot(cx, cy,'x',ms=20)
plt.show()
Run Code Online (Sandbox Code Playgroud)
scipy 凸包基于 Qhull,它应该具有方法中心,来自 Qhull文档,
中心是小平面超平面上的一个点。中心是小平面顶点的平均值。如果每个质心都低于相邻面的超平面,则相邻面是凸面。
其中椎体是一样的简单小面的质心,
对于具有 d 个顶点的单纯刻面,质心相当于质心或重心。
由于 scipy 似乎没有提供这个,你可以在子类中定义你自己的外壳,
class CHull(ConvexHull):
def __init__(self, points):
ConvexHull.__init__(self, points)
def centrum(self):
c = []
for i in range(self.points.shape[1]):
c.append(np.mean(self.points[self.vertices,i]))
return c
hull = CHull(points)
c = hull.centrum()
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5049 次 |
| 最近记录: |