#javascript #geometry #line #polygon
Вопрос:
Я написал эту функцию, которая должна была взять упорядоченный массив горизонтальных линий и соединить соседние концы, чтобы сформировать многоугольник, к сожалению, она не очень хорошо работает ни с выпуклыми формами, ни с полыми. Я пытался придумать решение этой проблемы, но на самом деле ничего не мог найти или понять.
Вот наглядное представление о том, что мне нужно. Строки нумеруются в соответствии с тем, как они отсортированы. И форма под линиями-это тот результат, который я хочу.
Визуальное представление того, что мне нужно:
Код, который я написал:
/*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; }