Есть прямая из массива точек
List<Point> listP;
Как дать фигуре, в которую складывается эта линия определение из 4 типов. Причем чтобы можно было из неведомо чего(картинка 2 - замкнутость есть, но больше незамкнутости), определить в процентном содержании к какому-нибудь из этих типов(в случае картинки 2 к типу 2 соответственно).
Любую информацию, которая пришла вам в голову, напишите, пожалуйста.
Типы:
Это как же у вас интересно определяется наличие не замкнутости/замкнутости точек? Даже если вы от второй к первой, от третей ко второй чертите линию - то почему вы в одних случаях то замыкаете последнюю точку на первую, то нет? И вас устраивает, определение замкнутости как "последняя точка совпадает с первой"?
А если устраивает - то не хотите соединять отрезки и определять есть ли пересечения отрезков? (гуглим алгоритм Бентли - Оттмана)
Также насколько я знаю, по набору точек можно пробовать определить, является фигура выпуклой (алгоритм Грехема, построение минимально выпуклых оболочек)
Судя по условию, есть два свойства - замкнутость и скругленность (острость).
Замкнутость определить легко, для этого считаем расстояние между первой и последней точками, и если оно меньше определённого порога, то считаем, что фигура замкнутая (порог можно подбирать по-разному, можно его положить равным чем-то константному, например 1e-4, а можно выбирать исходя и, например, диаметра вашей кривой, то есть брать его, допустим, 0.01 умножить на максимальное попарное расстояние между точками списка).
Со скруглённостью сложнее. Тем более, что могут быть скруглённые участки и угловатые. Тут предлагаю попробовать для каждой точки считать угол между выходящими из неё отрезками (на предыдущую и на следующую точку), если угол меньше определённого порога (допустим, меньше, чем 135 градусов), то угол считается "острием". Далее, смотрите, если "остриёв" у вас больше, чем, например, 30% точек, то, считаете что кривая острая, иначе округлая.
Это только идея, чтобы её довести до ума, придётся пошаманить, добавить какие-то разумные эвристики оценки, исходя из специфики конкретной задачи. Ну или же, если совсем серьёзно подходить, запускать нейросеть, которая все вышеизложенные построения (и даже больше) выследит сама из экспериментальных данных.
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости