Question

Il est plus d'une question d'algorithmes, mais nous espérons que quelqu'un peut me aider. J'ai une ligne en points de latitude / longitude et je veux créer un polygone à partir avec une épaisseur prédéfinie. Donc, fondamentalement, le polygone aurait des bords parallèles à la polyligne originale de chaque côté. Toute réflexion sur la meilleure approche à prendre pour cela?

EDIT: Mon plan actuel est de itérer sur chacun des points, trouver la pente au point suivant, puis trouver les lignes parallèles à l'autre et ceux qui constituent les côtés des polygones. Juste ne sais pas s'il y avait un moyen plus facile de le faire.

Était-ce utile?

La solution

Qu'est-ce que vous voulez faire est de créer une paire de nouvelles lignes qui sont décalées légèrement à gauche et à droite de la ligne d'origine. Donc:

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

Autres conseils

Si je comprends bien votre question, il est le même que cette un, ce qui a des réponses très détaillées déjà.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top