3

これはアルゴリズムに関する質問ですが、誰かが私を助けてくれることを願っています。緯度/経度のポイントで作成された線があり、そこから定義済みの太さでポリゴンを作成したいと考えています。したがって、基本的にポリゴンには、元のポリラインの両側に平行に走るエッジがあります。これを行うための最善のアプローチについて何か考えはありますか?

編集:私の現在の計画は、各ポイントを反復処理し、次のポイントへの勾配を見つけてから、両側に平行な線を見つけ、それらがポリゴンの側面を構成することです。もっと簡単な方法があるかどうかはわかりませんでした。

4

2 に答える 2

1

あなたの質問を理解できれば、それはこれと同じで、すでに非常に詳細な回答がいくつかあります。

于 2009-09-30T07:19:41.470 に答える
1

やりたいことは、元の線の左右にわずかにずれた新しい線のペアを作成することです。そう:

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}
    },
  ];
}
于 2009-09-30T07:11:38.027 に答える