// © Головин Г.Г., Код с комментариями, 2023 'use strict'; // матрицы-шаблоны для кубиков const shape1 = [ // пространственный крест [[0,0,0,0,0], [0,0,0,0,0], [0,0,1,0,0], [0,0,0,0,0], [0,0,0,0,0]], [[0,0,0,0,0], [0,0,0,0,0], [0,0,1,0,0], [0,0,0,0,0], [0,0,0,0,0]], [[0,0,1,0,0], [0,0,1,0,0], [1,1,1,1,1], [0,0,1,0,0], [0,0,1,0,0]], [[0,0,0,0,0], [0,0,0,0,0], [0,0,1,0,0], [0,0,0,0,0], [0,0,0,0,0]], [[0,0,0,0,0], [0,0,0,0,0], [0,0,1,0,0], [0,0,0,0,0], [0,0,0,0,0]]]; const shape2 = [ // крест-куб [[0,0,1,0,0], [0,0,1,0,0], [1,1,1,1,1], [0,0,1,0,0], [0,0,1,0,0]], [[0,0,1,0,0], [0,0,0,0,0], [1,0,0,0,1], [0,0,0,0,0], [0,0,1,0,0]], [[1,1,1,1,1], [1,0,0,0,1], [1,0,0,0,1], [1,0,0,0,1], [1,1,1,1,1]], [[0,0,1,0,0], [0,0,0,0,0], [1,0,0,0,1], [0,0,0,0,0], [0,0,1,0,0]], [[0,0,1,0,0], [0,0,1,0,0], [1,1,1,1,1], [0,0,1,0,0], [0,0,1,0,0]]]; // размер кубика, количество кубиков в ряду, отступ const size = 40, row = 5, gap = 50; // массивы для кубиков const cubes1 = [], cubes2 = []; // обходим матрицы, заполняем массивы кубиками for (let x=0; xMath.abs(b.dist-a.dist)>size ? b.dist-a.dist : b.clock-a.clock); // сортируем грани по удалённости от центра проекции perspective.sort((a,b)=>b.dist-a.dist); // рисуем параллельную проекцию drawFigure(cnv1, parallel); // рисуем перспективную проекцию drawFigure(cnv2, perspective); } // смежные стенки между соседними кубиками не рисуем function noAdjacent(array) { // сортируем грани по удалённости array.sort((a,b) => b.dist-a.dist); // удаляем смежные стенки между кубиками for (let i=0, j=1; isetInterval(repaint,50));