Matrix Rotation v2.0
by goldfingerxyz
HTML
<!-- Notes: * http://stackoverflow.com/questions/42519/how-do-you-rotate-a-two-dimensional-array * http://stackoverflow.com/questions/15170942/how-to-rotate-a-matrix-in-an-array-in-javascript -->
CSS
#trace p {
font-family:"Courier New", monospace;
font-size: 11px;
white-space: pre;
}
JavaScript
Number.prototype.mod = function (n) {
return ((this % n) + n) % n;
}
var trace = function (message) {
id = 'trace';
t = $('#' + id);
if (t.length < 1) t = $('<div>', {
'id': id
}).appendTo($('body'));
t.append($('<p>', {
'html': message
}));
};
var trace2 = function (label, message) {
trace('<strong>' + label + ':</strong><br /><br />' + message);
};
var pad = function (val, amt, ch) {
ch = typeof ch !== 'undefined' ? ch : ' ';
var str = val
var max = Math.abs(amt);
while (str.length < max) {
if (amt < 0) {
str += ch;
} else {
str = ch + str;
}
}
return str;
};
var printMatrix = function (matrix) {
var str = '';
for (var r = 0; r < matrix.length; r++) {
for (var c = 0; c < matrix[r].length; c++) {
var cell = matrix[r][c];
if (cell != 'undefined') {
str += pad(cell, 2);
} else {
str += '?';
}
if (c < matrix[r].length - 1) {
str += ' |';
}
}
if (r < matrix.length - 1) {
str += '\n';
for (var i = 0; i < matrix[r].length; i++) {
str += '---'
if (i < matrix[r].length - 1) {
str += '+';
}
}
str += '\n';
}
}
return str;
};
var arrayFilled = function (width, height, value) {
for (var a = []; a.length < height;) {
for (var r = []; r.length < width;) {
r.push(value);
}
a.push(r);
}
return a;
};
var rotateMatrix = function (matrix, direction) {
direction = direction.mod(360) || 0;
var deepCopy = function (obj) {
if (Object.prototype.toString.call(obj) === '[object Array]') {
var out = [],
i = 0,
len = obj.length;
for (; i < len; i++) {
...