Как построить контур по координатам вершин фигуры, состоящей из квадратов?
Есть двумерный массив в котором хранится фигура, состоящая из квадратов (каждый элемент - квадрат). Не могу придумать алгоритм, который будет преобразовывать этот массив в массив вершин этой фигуры (каждая вершина должна иметь координаты x и y), которые находятся в таком порядке, что переходя от одной вершины к следующей в массиве, получается эта фигура.
Язык реализации не особо важен (но желательно js), хочется просто понять алгоритм.
Ответы (2 шт):
Для построения контура по координатам вершин фигуры используется метод 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) и зафиксировать координаты вершин.

