Domanda

Questo è più di una questione di algoritmi, ma spero che qualcuno mi può aiutare con questo. Ho una linea fatta di di latitudine / longitudine punti e voglio creare un poligono da esso con un po 'di spessore predefinito. Quindi sostanzialmente il poligono dovrebbe avere bordi che corrono paralleli alla polilinea originale su entrambi i lati. Ogni pensiero sul miglior approccio da adottare per questo?

EDIT: Il mio piano attuale è quella di iterare su ciascuno dei punti, trovare la pista al punto successivo, poi trovare le linee parallele alla entrambi i lati e quelli compongono i lati dei poligoni. Solo che non sapevo se ci fosse un modo più semplice per farlo.

È stato utile?

Soluzione

Che cosa si vuole fare è creare un paio di nuove linee che vengono spostati leggermente a sinistra ea destra della linea originale. Quindi:

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

Altri suggerimenti

Se ho capito la tua domanda è la stessa di questo uno, che ha già alcune risposte molto dettagliate.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top