Найти двойную касательную в ломаной, определяемой точками (x, y)

#algorithm #computational-geometry #points #convex #concave

#алгоритм #вычислительная геометрия #Очки #выпуклая #вогнутый

Вопрос:

У меня есть `System.Windows.Медиафайлы.Коллекция Point3D, представляющая поперечное сечение объекта произвольной формы.

Он всегда более или менее имеет форму «крыльев чайки», рисунок «М» с двумя выпуклыми выпуклостями и «долиной» между ними. Его ориентация в пространстве произвольна, и нет никакой гарантии, что центральная впадина является единственной вогнутостью в поперечном сечении.

У меня уже есть метод, который обнаруживает одну точку, которая гарантированно лежит между этими долинами, и теперь я хочу найти пару точек, которые представляют «двойную касательную» вокруг центральной точки, то есть линию, проходящую между двумя точками, которая удерживает все остальные точки на одной стороне, икоторый также описывает начальную точку.

Ниже приведен рисунок, показывающий, чего я хочу достичь:

введите описание изображения здесь

Я считаю, что перекрестное произведение — хороший способ выяснить, являются ли три точки «вогнутыми» или «выпуклыми», но не понял, как выполнить цикл (как начать, что увеличить и когда остановиться).

Кроме того, хотя я мог бы использовать грубую силу (не так много точек), это наверняка повредило бы моим чувствам.

Ответ №1:

Определите выпуклую оболочку вершин. Последовательности вершин, которые не являются частью вершин выпуклой оболочки, соответствуют вогнутостям. Из вашего описания похоже, что всегда будет ровно одна вогнутость. Первая и последняя вершины последовательности вершин вогнутости являются конечными точками искомой линии.