@Yakut112

Как повернуть многомерный массив на 45 градусов?

var table = document.getElementById('table');
var cells = [];
function createFiled(){

    for(var i = 0;i < 20; i++){
        var tr = document.createElement('tr');
        cells[i] = []
   
        for(var j = 0;j < 20; j++){
            var td = document.createElement('td');
            td.dataset.x = j
            td.dataset.y = i
            tr.appendChild(td);
            cells[i][j] = td;    
        }
        table.appendChild(tr);   
    }
}
createFiled();


  1. Сформирован многомерный массив,как из него сформировать новый массив повернутый на 45 градусов?
  2. Кто может объяснить на пальцах все про повороты матриц(многомерных массивов) на 45 - 90 - 160 и тд. По часовой,против часовой стрелки.
  • Вопрос задан
  • 1043 просмотра
Решения вопроса 1
sergiks
@sergiks Куратор тега JavaScript
♬♬
Для проверки диагоналей не нужно поворачивать матрицу на 45°, достаточно проверять сумму индексов:
00 01 02
10 11 12
20 21 22

Диагонали слева снизу вправо вверх:
00        :  0+0 = 0
10, 01    :  1+0 = 0+1 = 1
20, 11, 02:  2+0 = 1+1 = 0+2 = 2

И так далее. Сумма индексов в таких диагоналях постоянна. Максимум в правой нижней клетке составляет удвоенный макс. индекс.

Чтобы проверить диагонали слева сверху вправо вниз, надо инвертировать индексы одного из измерений, напр. строк: не 0..N, а N..0
var arr = [
  'o,x,x'.split(','),
  'x,o,o'.split(','),
  'o,x,o'.split(','),
];

var r, c, key, diags = {};
for(r = 0; r < arr.length; r++) {
  for(c = 0; c < arr[r].length; c++) {
    key = r + arr[r].length - 1 - c; // слева сверху вправо вниз
    // key = r + c; // слева снизу вправо вверх
    
    if( diags.hasOwnProperty(key)) {
      if( diags[key] !== arr[r][c]) diags[key] = false;
    } else {
      diags[key] = arr[r][c];
    }
  }
}

for( key in diags) if( diags[key] === false) delete diags[key];
// {"0":"x","2":"o","3":"x","4":"o"}
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы