-
Notifications
You must be signed in to change notification settings - Fork 9
/
common.js
89 lines (81 loc) · 2.68 KB
/
common.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
cube_floor_num = 3;// 魔方的层数
rotateDir = {
'y': {
'sizeEdges': [
{'face': 'front', 'rowOrCol': 'row', 'stackDir': '1', 'readDir': '1'},
{'face': 'right', 'rowOrCol': 'row', 'stackDir': '1', 'readDir': '1'},
{'face': 'back', 'rowOrCol': 'row', 'stackDir': '1', 'readDir': '1'},
{'face': 'left', 'rowOrCol': 'row', 'stackDir': '1', 'readDir': '1'},
],
'faceUp': {'face': 'bottom', 'rotateDegree': 0},
'faceBottom': {'face': 'up', 'rotateDegree': 2}
},
'x': {
'sizeEdges': [
{'face': 'up', 'rowOrCol': 'col', 'stackDir': '1', 'readDir': '-1'},
{'face': 'back', 'rowOrCol': 'col', 'stackDir': '-1', 'readDir': '1'},
{'face': 'bottom', 'rowOrCol': 'col', 'stackDir': '1', 'readDir': '-1'},
{'face': 'front', 'rowOrCol': 'col', 'stackDir': '1', 'readDir': '-1'},
],
'faceUp': {'face': 'right', 'rotateDegree': 0},
'faceBottom': {'face': 'left', 'rotateDegree': 0}
},
'z': {
'sizeEdges': [
{'face': 'up', 'rowOrCol': 'row', 'stackDir': '1', 'readDir': '1'},
{'face': 'right', 'rowOrCol': 'col', 'stackDir': '-1', 'readDir': '1'},
{'face': 'bottom', 'rowOrCol': 'row', 'stackDir': '-1', 'readDir': '-1'},
{'face': 'left', 'rowOrCol': 'col', 'stackDir': '1', 'readDir': '-1'},
],
'faceUp': {'face': 'front', 'rotateDegree': 0},
'faceBottom': {'face': 'back', 'rotateDegree': 0}
},
};
//rotateDegree: 转多少个90(顺时针)度才能做成旋转层floor的顶面,底面 旋转层的底面是他的顶面向Y轴旋转180度做成的
//floor的原始是z轴堆叠方向的,
function $(id) {
return document.getElementById(id);
}
//旋转i == j二维数组 dir: 1 顺时针, -1 逆时针, step 步数
function rotateSquareArr(arr, dir, step) {
if (step == 0) {return arr;}
var rotate180 = false,
arrAfterRotate = [],
floor = arr.length,
maxIndex = floor - 1;
step = step % 4;
if (Math.abs(step) == 3) {
dir = dir * -1;
} else if (Math.abs(step) == 2) {
rotate180 = true;
}
if (rotate180) {
for (var i = 0; i < floor; i++) {
for (var j = 0; j < floor; j++) {
if (!arrAfterRotate[maxIndex - i]) {
arrAfterRotate[maxIndex - i] = [];
}
arrAfterRotate[maxIndex - i][maxIndex - j] = arr[i][j];
}
}
} else if (dir == 1) {
for (var i = 0; i < floor; i++) {
for (var j = 0; j < floor; j++) {
if (!arrAfterRotate[j]) {
arrAfterRotate[j] = [];
}
arrAfterRotate[j][maxIndex - i] = arr[i][j];
}
}
} else if (dir == -1) {
for (var i = 0; i < floor; i++) {
for (var j = 0; j < floor; j++) {
if (!arrAfterRotate[maxIndex - j]) {
arrAfterRotate[maxIndex - j] = [];
}
arrAfterRotate[maxIndex - j][i] = arr[i][j];
}
}
}
return arrAfterRotate;
}