69 |
69 |
}
|
70 |
70 |
}
|
71 |
71 |
|
72 |
|
///////////////////////////////////////////////////////////////////////////////////////////////////
|
73 |
|
// QUATS[i]*QUATS[j] = QUATS[QUAT_MULT[i][j]]
|
74 |
|
|
75 |
|
void initializeQuatMult()
|
76 |
|
{
|
77 |
|
mQuatMult = new int[][]
|
78 |
|
{
|
79 |
|
{ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23,},
|
80 |
|
{ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 0, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 12,},
|
81 |
|
{ 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 0, 1, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 12, 13,},
|
82 |
|
{ 3, 4, 5, 6, 7, 8, 9, 10, 11, 0, 1, 2, 15, 16, 17, 18, 19, 20, 21, 22, 23, 12, 13, 14,},
|
83 |
|
{ 4, 5, 6, 7, 8, 9, 10, 11, 0, 1, 2, 3, 16, 17, 18, 19, 20, 21, 22, 23, 12, 13, 14, 15,},
|
84 |
|
{ 5, 6, 7, 8, 9, 10, 11, 0, 1, 2, 3, 4, 17, 18, 19, 20, 21, 22, 23, 12, 13, 14, 15, 16,},
|
85 |
|
{ 6, 7, 8, 9, 10, 11, 0, 1, 2, 3, 4, 5, 18, 19, 20, 21, 22, 23, 12, 13, 14, 15, 16, 17,},
|
86 |
|
{ 7, 8, 9, 10, 11, 0, 1, 2, 3, 4, 5, 6, 19, 20, 21, 22, 23, 12, 13, 14, 15, 16, 17, 18,},
|
87 |
|
{ 8, 9, 10, 11, 0, 1, 2, 3, 4, 5, 6, 7, 20, 21, 22, 23, 12, 13, 14, 15, 16, 17, 18, 19,},
|
88 |
|
{ 9, 10, 11, 0, 1, 2, 3, 4, 5, 6, 7, 8, 21, 22, 23, 12, 13, 14, 15, 16, 17, 18, 19, 20,},
|
89 |
|
{ 10, 11, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 22, 23, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21,},
|
90 |
|
{ 11, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 23, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22,},
|
91 |
|
{ 12, 23, 22, 21, 20, 19, 18, 17, 16, 15, 14, 13, 0, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1,},
|
92 |
|
{ 13, 12, 23, 22, 21, 20, 19, 18, 17, 16, 15, 14, 1, 0, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2,},
|
93 |
|
{ 14, 13, 12, 23, 22, 21, 20, 19, 18, 17, 16, 15, 2, 1, 0, 11, 10, 9, 8, 7, 6, 5, 4, 3,},
|
94 |
|
{ 15, 14, 13, 12, 23, 22, 21, 20, 19, 18, 17, 16, 3, 2, 1, 0, 11, 10, 9, 8, 7, 6, 5, 4,},
|
95 |
|
{ 16, 15, 14, 13, 12, 23, 22, 21, 20, 19, 18, 17, 4, 3, 2, 1, 0, 11, 10, 9, 8, 7, 6, 5,},
|
96 |
|
{ 17, 16, 15, 14, 13, 12, 23, 22, 21, 20, 19, 18, 5, 4, 3, 2, 1, 0, 11, 10, 9, 8, 7, 6,},
|
97 |
|
{ 18, 17, 16, 15, 14, 13, 12, 23, 22, 21, 20, 19, 6, 5, 4, 3, 2, 1, 0, 11, 10, 9, 8, 7,},
|
98 |
|
{ 19, 18, 17, 16, 15, 14, 13, 12, 23, 22, 21, 20, 7, 6, 5, 4, 3, 2, 1, 0, 11, 10, 9, 8,},
|
99 |
|
{ 20, 19, 18, 17, 16, 15, 14, 13, 12, 23, 22, 21, 8, 7, 6, 5, 4, 3, 2, 1, 0, 11, 10, 9,},
|
100 |
|
{ 21, 20, 19, 18, 17, 16, 15, 14, 13, 12, 23, 22, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0, 11, 10,},
|
101 |
|
{ 22, 21, 20, 19, 18, 17, 16, 15, 14, 13, 12, 23, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0, 11,},
|
102 |
|
{ 23, 22, 21, 20, 19, 18, 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0,}
|
103 |
|
};
|
104 |
|
}
|
105 |
|
|
106 |
72 |
///////////////////////////////////////////////////////////////////////////////////////////////////
|
107 |
73 |
|
108 |
74 |
private void initializeScrambling()
|
... | ... | |
155 |
121 |
}
|
156 |
122 |
|
157 |
123 |
///////////////////////////////////////////////////////////////////////////////////////////////////
|
|
124 |
// TYPE 1
|
|
125 |
///////////////////////////////////////////////////////////////////////////////////////////////////
|
|
126 |
// QUATS[i]*QUATS[j] = QUATS[QUAT_MULT[i][j]]
|
|
127 |
///////////////////////////////////////////////////////////////////////////////////////////////////
|
|
128 |
|
|
129 |
void initializeQuatMult()
|
|
130 |
{
|
|
131 |
mQuatMult = new int[][]
|
|
132 |
{
|
|
133 |
{ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23,},
|
|
134 |
{ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 0, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 12,},
|
|
135 |
{ 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 0, 1, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 12, 13,},
|
|
136 |
{ 3, 4, 5, 6, 7, 8, 9, 10, 11, 0, 1, 2, 15, 16, 17, 18, 19, 20, 21, 22, 23, 12, 13, 14,},
|
|
137 |
{ 4, 5, 6, 7, 8, 9, 10, 11, 0, 1, 2, 3, 16, 17, 18, 19, 20, 21, 22, 23, 12, 13, 14, 15,},
|
|
138 |
{ 5, 6, 7, 8, 9, 10, 11, 0, 1, 2, 3, 4, 17, 18, 19, 20, 21, 22, 23, 12, 13, 14, 15, 16,},
|
|
139 |
{ 6, 7, 8, 9, 10, 11, 0, 1, 2, 3, 4, 5, 18, 19, 20, 21, 22, 23, 12, 13, 14, 15, 16, 17,},
|
|
140 |
{ 7, 8, 9, 10, 11, 0, 1, 2, 3, 4, 5, 6, 19, 20, 21, 22, 23, 12, 13, 14, 15, 16, 17, 18,},
|
|
141 |
{ 8, 9, 10, 11, 0, 1, 2, 3, 4, 5, 6, 7, 20, 21, 22, 23, 12, 13, 14, 15, 16, 17, 18, 19,},
|
|
142 |
{ 9, 10, 11, 0, 1, 2, 3, 4, 5, 6, 7, 8, 21, 22, 23, 12, 13, 14, 15, 16, 17, 18, 19, 20,},
|
|
143 |
{ 10, 11, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 22, 23, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21,},
|
|
144 |
{ 11, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 23, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22,},
|
|
145 |
{ 12, 23, 22, 21, 20, 19, 18, 17, 16, 15, 14, 13, 0, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1,},
|
|
146 |
{ 13, 12, 23, 22, 21, 20, 19, 18, 17, 16, 15, 14, 1, 0, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2,},
|
|
147 |
{ 14, 13, 12, 23, 22, 21, 20, 19, 18, 17, 16, 15, 2, 1, 0, 11, 10, 9, 8, 7, 6, 5, 4, 3,},
|
|
148 |
{ 15, 14, 13, 12, 23, 22, 21, 20, 19, 18, 17, 16, 3, 2, 1, 0, 11, 10, 9, 8, 7, 6, 5, 4,},
|
|
149 |
{ 16, 15, 14, 13, 12, 23, 22, 21, 20, 19, 18, 17, 4, 3, 2, 1, 0, 11, 10, 9, 8, 7, 6, 5,},
|
|
150 |
{ 17, 16, 15, 14, 13, 12, 23, 22, 21, 20, 19, 18, 5, 4, 3, 2, 1, 0, 11, 10, 9, 8, 7, 6,},
|
|
151 |
{ 18, 17, 16, 15, 14, 13, 12, 23, 22, 21, 20, 19, 6, 5, 4, 3, 2, 1, 0, 11, 10, 9, 8, 7,},
|
|
152 |
{ 19, 18, 17, 16, 15, 14, 13, 12, 23, 22, 21, 20, 7, 6, 5, 4, 3, 2, 1, 0, 11, 10, 9, 8,},
|
|
153 |
{ 20, 19, 18, 17, 16, 15, 14, 13, 12, 23, 22, 21, 8, 7, 6, 5, 4, 3, 2, 1, 0, 11, 10, 9,},
|
|
154 |
{ 21, 20, 19, 18, 17, 16, 15, 14, 13, 12, 23, 22, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0, 11, 10,},
|
|
155 |
{ 22, 21, 20, 19, 18, 17, 16, 15, 14, 13, 12, 23, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0, 11,},
|
|
156 |
{ 23, 22, 21, 20, 19, 18, 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0,}
|
|
157 |
};
|
|
158 |
}
|
|
159 |
|
|
160 |
///////////////////////////////////////////////////////////////////////////////////////////////////
|
|
161 |
// TYPE 1
|
158 |
162 |
|
159 |
163 |
private boolean cornerIsUp(int index)
|
160 |
164 |
{
|
... | ... | |
162 |
166 |
}
|
163 |
167 |
|
164 |
168 |
///////////////////////////////////////////////////////////////////////////////////////////////////
|
|
169 |
// TYPE 1
|
165 |
170 |
|
166 |
171 |
private boolean cornerIsLeft(int index)
|
167 |
172 |
{
|
... | ... | |
183 |
188 |
}
|
184 |
189 |
|
185 |
190 |
///////////////////////////////////////////////////////////////////////////////////////////////////
|
|
191 |
// TYPE 1
|
186 |
192 |
|
187 |
193 |
private boolean quatIsBad(int quatIndex, int corner)
|
188 |
194 |
{
|
... | ... | |
201 |
207 |
}
|
202 |
208 |
|
203 |
209 |
///////////////////////////////////////////////////////////////////////////////////////////////////
|
|
210 |
// TYPE 1
|
204 |
211 |
|
205 |
212 |
private boolean isPermittedDo(int angle)
|
206 |
213 |
{
|
... | ... | |
220 |
227 |
}
|
221 |
228 |
|
222 |
229 |
///////////////////////////////////////////////////////////////////////////////////////////////////
|
|
230 |
// TYPE 1
|
223 |
231 |
|
224 |
232 |
private boolean isPermittedUp(int angle)
|
225 |
233 |
{
|
... | ... | |
239 |
247 |
}
|
240 |
248 |
|
241 |
249 |
///////////////////////////////////////////////////////////////////////////////////////////////////
|
|
250 |
// TYPE 1
|
242 |
251 |
|
243 |
252 |
private void computePermittedAngles()
|
244 |
253 |
{
|
... | ... | |
258 |
267 |
}
|
259 |
268 |
|
260 |
269 |
///////////////////////////////////////////////////////////////////////////////////////////////////
|
|
270 |
// TYPE 1
|
261 |
271 |
|
262 |
272 |
private int getNextAngle(Random rnd, int layer)
|
263 |
273 |
{
|
... | ... | |
268 |
278 |
}
|
269 |
279 |
|
270 |
280 |
///////////////////////////////////////////////////////////////////////////////////////////////////
|
|
281 |
// TYPE 1
|
271 |
282 |
|
272 |
283 |
private int getNextAngleNotZero(Random rnd, int layer)
|
273 |
284 |
{
|
... | ... | |
278 |
289 |
}
|
279 |
290 |
|
280 |
291 |
///////////////////////////////////////////////////////////////////////////////////////////////////
|
|
292 |
// TYPE 1
|
281 |
293 |
|
282 |
294 |
private int makeQuat(int axis,int index)
|
283 |
295 |
{
|
... | ... | |
287 |
299 |
}
|
288 |
300 |
|
289 |
301 |
///////////////////////////////////////////////////////////////////////////////////////////////////
|
|
302 |
// TYPE 1
|
290 |
303 |
|
291 |
304 |
private boolean cornerBelongs(int index, int axis, int layer)
|
292 |
305 |
{
|
... | ... | |
303 |
316 |
}
|
304 |
317 |
|
305 |
318 |
///////////////////////////////////////////////////////////////////////////////////////////////////
|
|
319 |
// TYPE 1
|
306 |
320 |
|
307 |
321 |
private void updateCornerQuats(int[] rotInfo)
|
308 |
322 |
{
|
... | ... | |
325 |
339 |
}
|
326 |
340 |
|
327 |
341 |
///////////////////////////////////////////////////////////////////////////////////////////////////
|
|
342 |
// TYPE 1
|
328 |
343 |
|
329 |
344 |
private void randomizeNewScramble1(int[][] scramble, Random rnd, int curr, int total)
|
330 |
345 |
{
|
Rotations of a Cuboid - finished.