Вопрос

Это скорее вопрос алгоритмов, но, надеюсь, кто -то поможет мне с этим. У меня есть линия из точек широты/долготы, и я хочу создать из нее многоугольник с некоторой предопределенной толщиной. Таким образом, в основном у полигона были бы края, которые будут параллельно исходной полилине с обеих сторон. Есть мысли о лучшем подходе для этого?

РЕДАКТИРОВАТЬ: Мой текущий план состоит в том, чтобы итерация над каждой из точек, найдите наклон в следующую точку, затем найдите параллельные линии с любой стороны, а те, которые составляют стороны многоугольников. Просто не знал, был ли более простой способ сделать это.

Это было полезно?

Решение

То, что вы хотите сделать, это создать пару новых линий, которые немного смещены влево и справа от исходной линии. Так:

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

Другие советы

Если я понимаю ваш вопрос, он такой же, как это Один, который уже имеет очень подробные ответы.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top