Вы можете проверить форму выпуклой оболочки, обойдя все края и проверив, что следующий край всегда движется в одном и том же направлении (влево / вправо).Это быстрый и дешевый алгоритм.Вот реализация этого здесь: en.wikipedia.org / wiki / Graham_scan
Если у вас нет выпуклой оболочки, выполните алгоритм обтекания пакета, чтобы получить выпуклую оболочку, котораяохватывает все ваши очки (снова довольно быстро). ru.wikipedia.org / wiki / Gift_wrapping_algorithm
Теперь ищите точки, которые находятся на вашей фигуре, но не на выпуклой оболочке.Для каждого прогона этих точек создайте новую фигуру из этих точек (плюс 2 с каждой стороны выпуклой оболочки).
Рекурсия теперь ваш друг: выполните точно такой же процесс для каждой из подформВы только что сделали.
Я использовал эту технику для проверки точки, содержащейся в произвольной форме: то есть точка должна быть внутри выпуклой оболочки (легко проверить), но не какая-либо из подгрупп.формы, или их подформы, или их подформы ....