我正在尝试使用库Scipy和ConvexHull创建一个凸包。据我所知,它称为QHull。

当我要添加的点不具有“完整尺寸”时,将出现问题。例子:

from scipy.spatial import ConvexHull
import numpy as np
points = np.append([[0,2]],[[2,0]],axis=0)
hull = ConvexHull(points)

具有输出:
Traceback (most recent call last):
  File "C:/folder/vertices_scipy2.py", line 5, in <module>
hull = ConvexHull(points)
  File "scipy\spatial\qhull.pyx", line 2230, in scipy.spatial.qhull.ConvexHull.__init__ (scipy\spatial\qhull.c:20317)
  File "scipy\spatial\qhull.pyx", line 328, in scipy.spatial.qhull._Qhull.__init__ (scipy\spatial\qhull.c:3639)
QhullError: Qhull error

但是,如果添加一个额外的点,则凸包具有完整的尺寸:
from scipy.spatial import ConvexHull
import numpy as np
points = np.append([[0,0],[0,2]],[[2,0]],axis=0)
hull = ConvexHull(points)

然后一切正常。一个示例与另一个示例(我已经做了很多其他示例,可以肯定)之间的区别在于,第一种情况下的凸包在二维空间中是一维的,而第二种情况下的凸包是2维的二维空间中的三维(即全维)。

有任何想法吗?我认为自docs指示以来传递了一些qhull_options,正如答案中提到的那样:



但是,我已经阅读了许多options in QHull,但似乎都没有解决这个问题。我随机尝试了其中一些,但收效甚微。

任何帮助都会有所帮助。我正在开发一个程序,该程序可以创建数百个这些船体,其中一些不是全尺寸的。

最佳答案

看来ConvexHull不支持退化的凸包。

点的数量必须至少为尺寸的数量加一,以具有不退化的凸包。

例如,在飞机上,需要3个点才能拥有不退化的船体:3个点的凸船体将是一个三角形,而退化的船体将是2个点之间的线段。

实际上docs提到:

关于python - Scipy ConvexHull和QHull : rank/dimension is not maximal,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/30132124/

10-12 22:45