题
这更多是一个算法问题,但希望有人可以帮助我。我有一条纬度/经度点的线,我想从中创建一个多边形的多边形。因此,基本上,多边形的边缘将平行于两侧的原始多线线。关于最佳方法的任何想法吗?
编辑:我当前的计划是在每个点上迭代,找到下一个点的斜率,然后找到两侧的平行线,而这些线构成了多边形的侧面。只是不知道是否有一种更简单的方法可以做到。
解决方案
您要做的是创建一对新线条,这些新线条略微向右移动到原始行的左右移动。所以:
var polygon = [
{x:0, y:0},
{x:10, y:0},
{x:10, y:10},
{x:0, y:10}
];
var outerPolygon = [];
var innerPolygon = [];
for(var i=1; i<polygon.length; i++){
var ret = newLines(polygon[i-1], polygon[i]);
outerPolygon.push(ret[0]);
innerPolygon.push(ret[1]);
}
function newLines(start, stop){
var dx = start.x - stop.x;
var dy = start.y - stop.y;
var d = Math.sqrt(dx*dx + dy*dy);
dx /= d;
dy /= d;
var rNormal = {dx: dy, dy:-dx};
var lNormal = {dx: -dy, dy:dx};
return [
{start:{
x:start.x+rNormal.dx,
y:start.y+rNormal.dy},
stop:{
x:stop.x+rNormal.dx,
y:stop.y+rNormal.dy}
},
{start:{
x:start.x+lNormal.dx,
y:start.y+lNormal.dy},
stop:{
x:stop.x+lNormal.dx,
y:stop.y+lNormal.dy}
},
];
}
其他提示
如果我理解您的问题,那就与 这个 一个,它已经有一些非常详细的答案。
不隶属于 StackOverflow