Я пытаюсь найти алгоритм рисования простого (не допускается пересечение линий) неправильного многоугольника.
Количество сторон должно быть задано пользователем, n>3
.
Вот начальный код, который рисует только сложный многоугольник (линии пересекаются):
var ctx = document.getElementById('drawpolygon').getContext('2d');
var sides = 10;
ctx.fillStyle = '#f00';
ctx.beginPath();
ctx.moveTo(0, 0);
for(var i=0;i<sides;i++)
{
var x = getRandomInt(0, 100);
var y = getRandomInt(0, 100);
ctx.lineTo(x, y);
}
ctx.closePath();
ctx.fill();
// https://stackoverflow.com/a/1527820/1066234
function getRandomInt(min, max) {
min = Math.ceil(min);
max = Math.floor(max);
return Math.floor(Math.random() * (max - min + 1)) + min;
}
JSFiddle: https://jsfiddle.net/kai_noack/op2La1jy/6/
Я понятия не имею, как определить следующая точка для соединительной линии , чтобы она не пересекала никакую другую линию.
Кроме того, последняя точка должна закрывать многоугольник.
Вот примертого, как может выглядеть один из полученных многоугольников:

Редактировать: Сегодня я подумал, что одним из возможных алгоритмов будет расположение правильных точек многоугольника (например, в виде прямоугольника), а затем переместите их в случайном порядке в xy-направлениях, проверяя, чтобы сгенерированные линии не обрезались.