Постройте многоугольник из горизонтальных линий

#javascript #geometry #line #polygon

Вопрос:

Я написал эту функцию, которая должна была взять упорядоченный массив горизонтальных линий и соединить соседние концы, чтобы сформировать многоугольник, к сожалению, она не очень хорошо работает ни с выпуклыми формами, ни с полыми. Я пытался придумать решение этой проблемы, но на самом деле ничего не мог найти или понять.

Вот наглядное представление о том, что мне нужно. Строки нумеруются в соответствии с тем, как они отсортированы. И форма под линиями-это тот результат, который я хочу.

Визуальное представление того, что мне нужно:

img

Код, который я написал:

 /*Structure of arr:  [... [[x,y], [x2,y2]], [[x,y],[x2,y2]], ...] */  const buildPolygon = (arr) =gt; {  let edges = [...arr];  let polygon = edges[0];  let last = edges[0];  edges.shift();  let i = 0;  while (true) {  if (i gt;= edges.length) {  break;  } //temporary solution so it doesn't go into an infinite loop  if (last[1][0] === edges[i][0][0]) {  last = edges[i]  polygon.push(...last);  edges.splice(i,1);  i = 0;  } else if (last[1][0] === edges[i][1][0]){  last = [edges[i][1], edges[i][0]];  polygon.push(...last);  edges.splice(i,1);  i = 0;  } else i    }  polygon = polygon.flat(Infinity);  return polygon;  }