Pergunta

Isso é mais uma pergunta de algoritmos, mas espero que alguém possa me ajudar com isso. Eu tenho uma linha feita de pontos de latitude/longitude e quero criar um polígono com alguma espessura predefinida. Então, basicamente, o polígono teria bordas que corriam paralelas à poliina original de ambos os lados. Algum pensamento sobre a melhor abordagem a ser adotada para isso?

EDIT: Meu plano atual é iterar sobre cada um dos pontos, encontrar a inclinação para o próximo ponto e encontrar as linhas paralelas para o lado de ambos os lados e essas compõem as laterais dos polígonos. Só não sabia se havia uma maneira mais fácil de fazê -lo.

Foi útil?

Solução

O que você deseja fazer é criar um par de novas linhas que são deslocadas ligeiramente para a esquerda e direita da linha original. Então:

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}
    },
  ];
}

Outras dicas

Se eu entendo sua pergunta, é o mesmo que isto um, que já tem algumas respostas muito detalhadas.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top