【发布时间】:2019-08-17 01:11:39
【问题描述】:
我正在尝试找到一种算法来绘制一个简单(不允许线相交)的不规则多边形。
边数应由用户定义,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 方向上重新定位到随机量,同时检查生成的线是否没有被切割。
【问题讨论】:
-
这项研究可以提供帮助:cglab.ca/~sander/misc/ConvexGeneration/convex.html。它只处理凸多边形。如果没有凸需求,它可能会更容易
-
有同样的问题,但在matlab中:stackoverflow.com/questions/8997099/…
-
有没有要求是随机的?
标签: javascript algorithm polygon