Frage

Dies ist eher eine Algorithmenfrage, aber hoffentlich kann mir jemand dabei helfen. Ich habe eine Linie aus Breiten-/Longitude -Punkten und möchte ein Polygon mit einer vordefinierten Dicke daraus erzeugen. Grundsätzlich hat das Polygon Kanten, die parallel zur ursprünglichen Polylinie zu beiden Seiten laufen. Irgendwelche Gedanken zum besten Ansatz dafür?

Bearbeiten: Mein aktueller Plan ist es, über jeden der Punkte zu iterieren, die Steigung bis zum nächsten Punkt zu finden und dann die parallele Linien auf der beiden Seiten zu finden und diese bestehen die Seiten der Polygone. Ich wusste nur nicht, ob es eine einfachere Möglichkeit gab, es zu tun.

War es hilfreich?

Lösung

Was Sie tun möchten, ist ein Paar neue Linien zu erstellen, die leicht nach links und rechts von der ursprünglichen Linie verschoben werden. So:

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

Andere Tipps

Wenn ich Ihre Frage verstehe, ist es dasselbe wie Dies Eine, die bereits einige sehr detaillierte Antworten hat.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top