Pregunta

Esta es más una pregunta de algoritmos, pero espero que alguien pueda ayudarme con esto. Tengo una línea hecha de puntos de latitud/longitud y quiero crear un polígono a partir de él con un grosor predefinido. Entonces, básicamente, el polígono tendría bordes que corren paralelos a la polilínea original a cada lado. ¿Alguna idea sobre el mejor enfoque para tomar esto?

EDITAR: Mi plan actual es iterar sobre cada uno de los puntos, encontrar la pendiente en el siguiente punto, luego encontrar las líneas paralelas a cualquier lado y aquellos forman los lados de los polígonos. Simplemente no sabía si había una manera más fácil de hacerlo.

¿Fue útil?

Solución

Lo que desea hacer es crear un par de nuevas líneas que se desplazan ligeramente hacia la izquierda y la derecha de la línea original. Asi que:

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

Otros consejos

Si entiendo tu pregunta, es lo mismo que este Uno, que ya tiene algunas respuestas muy detalladas.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top