【发布时间】:2015-03-10 14:55:41
【问题描述】:
我在带有底层网格的画布上绘制多边形
我现在想把这个多边形分割成多个多边形(基于网格)
所以我得到了 4 个多边形的坐标,而不是 1 个多边形。
是否有一个我没有考虑过的简单解决方案?
这是我的测试画布的代码 (codepen)
<script>
var bw = 200;
var bh = 200;
var p = 0;
var cw = bw + (p*2) + 1;
var ch = bh + (p*2) + 1;
var grid = 50;
var canvas = document.getElementById("canvas");
var context = canvas.getContext("2d");
function drawBoard(){
context.beginPath();
for (var x = 0; x <= bw; x += grid){
context.moveTo(0.5 + x + p, p);
context.lineTo(0.5 + x + p, bh + p);
}
for (var x = 0; x <= bh; x += grid) {
context.moveTo(p, 0.5 + x + p);
context.lineTo(bw + p, 0.5 + x + p);
}
context.lineWidth = 1;
context.strokeStyle = "black";
context.stroke();
}
drawBoard();
// Polygon
context.fillStyle = '#f00';
context.beginPath();
context.moveTo(0, 0);
context.lineTo(100,50);
context.lineTo(50, 100);
context.lineTo(0, 90);
context.closePath();
context.fill();
</script>
【问题讨论】:
-
@KenFyrstenberg 关于这个有什么想法吗?我可以使用 drawImage 裁剪可视化将多边形划分为网格单元的解决方案。然后对每个子多边形单元格进行行进正方形轮廓检测。最后做一些路径简化以将每条路径减少到(希望)只是子多边形的顶点。但这似乎很混乱。我无法做的是可视化数学解决方案——也许在单个单元格内找到线段,并以某种方式用这些线段创建封闭路径。我只是认为有一个简单的解决方案,它让我不知道它:-)
-
@markE(嗯,如果用户不在列表中,@'s 似乎不起作用,很高兴知道)。我会做与 Matt Ko 所概述的类似的事情。找到每个正方形内的交点并基于此重建多边形(检查边并将网格区域限制为原始多边形大小)。
-
你可以用每条网格线分割多边形,它会很慢而且可能不是最好的解决方案,这里已经讨论了如何分割:stackoverflow.com/questions/3623703/…
标签: javascript html algorithm canvas split