Это действительно сложная проблема, так как вам нужно беспокоиться о некоторых вещах.Многоугольники могут быть простыми выпуклыми предметами или более сложными «вогнутыми» формами или многоразветвленными формами, состоящими из множества «островков» и озер.Я бы сразу понял эту часть, поскольку, если вам нужен только простой случай, лучше.
1) Выпуклые многоугольники легко генерировать из случайных точек, поскольку вам просто нужна выпуклая оболочка - порядок расположения точек не влияет на результат.Для реальных полигонов очень важен порядок, в котором вы связываете их вместе как границу, иначе вы получите бессмысленные формы с искривленными границами.Но есть пакет alphahull
для генерации более умных оболочек из невыпуклых точек.
2) Если ни одна часть многоугольника не может превысить основную границу, то вам нужно, чтобы каждая вершина была как внутри границы, так и чтобы ни один соединяющий их сегмент не пересекал основную границу.Представьте себе многоугольник, вершины которого находятся внутри национальной границы, но один отрезок пересекает вход в реку.Есть функции выборки для получения точек в пределах многоугольника (spsample
в sp
, csr
в splancs
), и есть геометрические тесты в rgeos
, которые можно использовать, чтобы убедиться, что пересечений нет - все же это лишнееработать, поскольку вы тестируете на предмет сбоя набора точек выборки, определяющих многоугольник, а не генерирующих известные "хорошие случаи".
Если вы можете ослабить некоторые из ограничений, это может быть вполне выполнимо.Вы упоминаете «круговые многоугольники», действительно ли вы имеете в виду круги (или приблизительные круги), поскольку в таком случае некоторые тесты могут стать намного проще.
Я был бы склонен копаться в ваших целях и посмотреть, действительно ли это то, чем вы хотите заниматься, или можете ли вы упростить вещи еще больше.