Я пытаюсь создать выпуклый корпус с помощью библиотеки Scipy и ConvexHull. Насколько я знаю, он называет QHull.Scipy ConvexHull и QHull: rank/dimension не является максимальным
Проблема возникает, когда точки, которые я хочу добавить, не имеют «полного измерения». Пример:
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- мерного в двумерном пространстве (т. е. полноразмерном).
Любые идеи? Я думал, проходя некоторые qhull_options с моментом docs показывают, как это было упомянуто в ответах, что:
QHullError Воспитанного когда Qhull встречает условие ошибки, такие как геометрическое вырождение, когда варианты решения не включены.
Однако, я прочитал многие из options in QHull, и ни один из них, похоже, не затрагивает эту проблему. Я пробовал некоторые из них наугад, с небольшим успехом.
Любая помощь была бы полезна. Я работаю над программой, которая создает сотни этих корпусов, а некоторые из них не являются полноразмерными.
Таким образом, вы уверены в этом? Он не допускает «вырожденных» выпуклых оболочек? Я начал с гораздо большего количества очков, но в некоторых ситуациях комбинация «линейно зависима», что раздражает. Вот почему я спрашиваю, каковы варианты решения «геометрического вырождения». Я напишу это более четко в вопросе. Спасибо! –
Просто, чтобы уточнить его, даже если у меня много точек (это настоящая проблема, а не MWE, которую я построил), это все равно происходит, например. (1,1) (2,2) (3,3) ... и т. д. –
Собственно, сэр, вы дали мне ключ к решению: вырождение слова (как математик, я никогда не видел, чтобы оно применялось к этот контекст, но к точкам бесконечности). Если я подстановлю последнюю строку по строке: 'hull = ConvexHull (points, qhull_options =" QJn ")' работает как шарм. Спасибо! –