首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ConvexHull和QHull:秩/维不是最大的

ConvexHull和QHull:秩/维不是最大的
EN

Stack Overflow用户
提问于 2015-05-08 20:12:33
回答 2查看 5.7K关注 0票数 7

我正在尝试使用库Scipy和ConvexHull创建一个凸赫尔。据我所知,它叫QHull。

当我想要添加的点没有“完全维度”时,问题就出现了。示例:

代码语言:javascript
复制
from scipy.spatial import ConvexHull
import numpy as np
points = np.append([[0,2]],[[2,0]],axis=0)
hull = ConvexHull(points)

民政事务总署产出:

代码语言:javascript
复制
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

然而,如果我加一个额外的点,使凸包有完整的尺寸:

代码语言:javascript
复制
from scipy.spatial import ConvexHull
import numpy as np
points = np.append([[0,0],[0,2]],[[2,0]],axis=0)
hull = ConvexHull(points)

那么一切都正常。一个例子和另一个例子的区别(我已经做了很多其他的例子,所以我可以肯定)是,在第一种情况下,凸包在二维空间中是一维的,而在第二种情况下,在二维空间(即全维)中是二维的。

有什么想法吗?我认为从qhull_options开始传递一些文档就表明了这一点,正如在回答中提到的那样:

当Qhull遇到错误条件时引发QHullError,例如不启用解析选项时的几何简并。

然而,我读过许多QHull中的选项,似乎没有一个能解决这个问题。我随机尝试了其中的一些,但没有取得什么效果。

任何帮助都会有帮助。我正在做一个程序,创造数百个这样的船体,其中有些不是全维度的。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-05-08 20:23:34

ConvexHull似乎不支持退化凸壳。

点的数目至少必须是维数加上一个具有非退化凸壳的数。

例如,在一个平面上,你需要3分才能有一个非退化的船体:3点的凸包是一个三角形,而退化的船体是两点之间的段。

事实上,文档提到:

引发:当Qhull遇到错误条件时引发QhullError,例如当未启用解析选项时的几何简并。

票数 4
EN

Stack Overflow用户

发布于 2015-05-08 20:40:42

我不能评论,所以这不是真正的回答,但是您可以通过以下方法获得更好的错误描述:

代码语言:javascript
复制
>>> points2 = np.append([[0,0],[1,1]],[[2,2]],axis=0)
>>> hull = ConvexHull(points2)
QH6154 qhull precision error: initial facet 1 is coplanar with the interior point
ERRONEOUS FACET:
- f1
    - flags: bottom simplicial flipped
    - normal:   -0.7071   0.7071
    - offset:         -0
    - vertices: p2(v1) p0(v0)
    - neighboring facets: f2 f3

While executing:  | qhull i Qt
Options selected for Qhull 2012.1 2012/02/18:
  run-id 972186139  incidence  Qtriangulate  _pre-merge  _zero-centrum
  _max-width  2  Error-roundoff 1.7e-15  _one-merge 8.6e-15
  _near-inside 4.3e-14  Visible-distance 3.4e-15  U-coplanar-distance 3.4e-15
  Width-outside 6.9e-15  _wide-facet 2.1e-14

The input to qhull appears to be less than 2 dimensional, or a
computation has overflowed.

Qhull could not construct a clearly convex simplex from points:
- p1(v2):     1     1
- p2(v1):     2     2
- p0(v0):     0     0

The center point is coplanar with a facet, or a vertex is coplanar
with a neighboring facet.  The maximum round off error for
computing distances is 1.7e-15.  The center point, facets and distances
to the center point are as follows:

center point        1        1

facet p2 p0 distance=    0
facet p1 p0 distance=    0
facet p1 p2 distance=    0

These points either have a maximum or minimum x-coordinate, or
they maximize the determinant for k coordinates.  Trial points
are first selected from points that maximize a coordinate.

The min and max coordinates for each dimension are:
  0:         0         2  difference=    2
  1:         0         2  difference=    2

If the input should be full dimensional, you have several options that
may determine an initial simplex:
  - use 'QJ'  to joggle the input and make it full dimensional
  - use 'QbB' to scale the points to the unit cube
  - use 'QR0' to randomly rotate the input for different maximum points
  - use 'Qs'  to search all points for the initial simplex
  - use 'En'  to specify a maximum roundoff error less than 1.7e-15.
  - trace execution with 'T3' to see the determinant for each point.

If the input is lower dimensional:
  - use 'QJ' to joggle the input and make it full dimensional
  - use 'Qbk:0Bk:0' to delete coordinate k from the input.  You should
    pick the coordinate with the least range.  The hull will have the
    correct topology.
  - determine the flat containing the points, rotate the points
    into a coordinate plane, and delete the other coordinates.
  - add one or more points to make the input full dimensional.
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "qhull.pyx", line 2230, in scipy.spatial.qhull.ConvexHull.__init__ (scipy/spatial/qhull.c:19173)
  File "qhull.pyx", line 328, in scipy.spatial.qhull._Qhull.__init__ (scipy/spatial/qhull.c:3670)
scipy.spatial.qhull.QhullError: Qhull error
>>> 
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30132124

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档