Как построить контур по координатам вершин фигуры, состоящей из квадратов?

Есть двумерный массив в котором хранится фигура, состоящая из квадратов (каждый элемент - квадрат). Не могу придумать алгоритм, который будет преобразовывать этот массив в массив вершин этой фигуры (каждая вершина должна иметь координаты x и y), которые находятся в таком порядке, что переходя от одной вершины к следующей в массиве, получается эта фигура.

Язык реализации не особо важен (но желательно js), хочется просто понять алгоритм.


Изначальный массив

То, что должно получиться


Ответы (2 шт):

Автор решения: Stop-TussiN

Для построения контура по координатам вершин фигуры используется метод CanvasRenderingContext2D.prototype.moveTo() и CanvasRenderingContext2D.prototype.lineTo().

Например, для создания контура по координатам двух квадратов следует использовать следующий код:

// Координаты вершин первого квадрата

const x1 = 10;
const y1 = 10;
const x2 = 20;
const y2 = 10;
const x3 = 20;
const y3 = 20;
const x4 = 10;
const y4 = 20;

// Координаты вершин второго квадрата

const x5 = 30;
const y5 = 30;
const x6 = 40;
const y6 = 30;
const x7 = 40;
const y7 = 40;
const x8 = 30;
const y8 = 40;

// Создание Canvas

const canvas = document.createElement('canvas');
const ctx = canvas.getContext('2d');
ctx.beginPath();

// Построение контура по координатам вершин двух квадратов

ctx.moveTo(x1, y1);
ctx.lineTo(x2, y2);
ctx.lineTo(x3, y3);
ctx.lineTo(x4, y4);
ctx.lineTo(x5, y5);
ctx.lineTo(x6, y6);
ctx.lineTo(x7, y7);
ctx.lineTo(x8, y8);
ctx.lineTo(x1, y1);
ctx.stroke();
→ Ссылка
Автор решения: Вадим

Дополнить массив где хранится фигура периметром из нолей. Затем последовательно квадратом 2х2 (с шагом в одну строку, столбец) просканировать весь дополненный массив на условие нахождения вершины фигуры в центре квадрата (вершина попадает в квадрат, если есть один угол 0 и остальные 1 или один угол 1 и остальные 0) и зафиксировать координаты вершин.

→ Ссылка