Какую форму ваш ограничивающий конверт? Если это прямоугольник, то сгенерируйте случайный многоугольник в виде списка точек в пределах [0,1] x [0,1] и масштабируйте до размера вашего прямоугольника.
Если конверт не является прямоугольником, все становится немного сложнее. В этом случае вы можете получить наилучшую производительность, просто генерируя точки внутри квадрата единицы и отбрасывая любые, которые лежат в той части квадрата единицы, которая не масштабируется до ограничивающего конверта по вашему выбору.
НТН
Mark
Дополнение
Если вам нужны только выпуклые многоугольники, вы бы использовали один из алгоритмов выпуклой оболочки . Поскольку вам, кажется, не нужны только выпуклые многоугольники, ваше предложение круговой развертки сработает.
Но вам может показаться, что проще провести по линии, параллельной оси x или y. Предположим, ось X.
- Сортировка точек в x-порядке.
- Выберите крайнюю левую (т.е. первую) точку. В координате y этой точки нарисуйте воображаемую горизонтальную линию через единичный квадрат. Подготовьтесь создать список точек вдоль границы многоугольника над воображаемой линией и еще один список вдоль границы ниже нее.
- Выберите следующую точку. Добавьте его в верхний или нижний список границ, определяемый его координатой y.
- Продолжайте, пока у вас не будет точек.
Это будет генерировать выпуклые и невыпуклые многоугольники, но невыпуклость будет иметь довольно ограниченную форму. Нет входов или поворотов.
Другая мысль
Чтобы избежать пересечения краев и избежать круговой развертки после генерации случайных точек внутри квадрата единицы, вы можете:
- Генерация случайных точек внутри единичного круга в полярных координатах, т. Е. (R, тета).
- Сортировка точек в тета-порядке.
- Преобразовать в декартовы координаты.
- Масштабируйте единицу окружности до ограничительного эллипса по вашему выбору.
С макушки головы, похоже, все в порядке.