Revision ef018c1b
Added by Leszek Koltunski over 2 years ago
src/main/java/org/distorted/objects/TwistyPyraminx.java | ||
---|---|---|
46 | 46 |
private ScrambleState[] mStates; |
47 | 47 |
private int[] mBasicAngle; |
48 | 48 |
private Static4D[] mQuats; |
49 |
private float[][] mCuts; |
|
50 |
private boolean[][] mLayerRotatable; |
|
49 | 51 |
private ObjectSticker[] mStickers; |
50 | 52 |
private Movement mMovement; |
51 | 53 |
|
... | ... | |
214 | 216 |
|
215 | 217 |
float[][] getCuts(int numLayers) |
216 | 218 |
{ |
217 |
float[][] cuts = new float[4][numLayers-1]; |
|
218 |
|
|
219 |
for(int i=0; i<numLayers-1; i++) |
|
219 |
if( mCuts==null ) |
|
220 | 220 |
{ |
221 |
float cut = (1.0f+i-numLayers/3.0f)*(SQ6/3); |
|
222 |
cuts[0][i] = cut; |
|
223 |
cuts[1][i] = cut; |
|
224 |
cuts[2][i] = cut; |
|
225 |
cuts[3][i] = cut; |
|
221 |
mCuts = new float[4][numLayers-1]; |
|
222 |
|
|
223 |
for(int i=0; i<numLayers-1; i++) |
|
224 |
{ |
|
225 |
float cut = (1.0f+i-numLayers/3.0f)*(SQ6/3); |
|
226 |
mCuts[0][i] = cut; |
|
227 |
mCuts[1][i] = cut; |
|
228 |
mCuts[2][i] = cut; |
|
229 |
mCuts[3][i] = cut; |
|
230 |
} |
|
226 | 231 |
} |
227 | 232 |
|
228 |
return cuts; |
|
233 |
return mCuts; |
|
234 |
} |
|
235 |
|
|
236 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
|
237 |
|
|
238 |
private void getLayerRotatable(int numLayers) |
|
239 |
{ |
|
240 |
if( mLayerRotatable==null ) |
|
241 |
{ |
|
242 |
int numAxis = ROT_AXIS.length; |
|
243 |
boolean[] tmp = new boolean[numLayers]; |
|
244 |
for(int i=0; i<numLayers; i++) tmp[i] = true; |
|
245 |
mLayerRotatable = new boolean[numAxis][]; |
|
246 |
for(int i=0; i<numAxis; i++) mLayerRotatable[i] = tmp; |
|
247 |
} |
|
229 | 248 |
} |
230 | 249 |
|
231 | 250 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
... | ... | |
357 | 376 |
|
358 | 377 |
public Movement getMovement() |
359 | 378 |
{ |
360 |
if( mMovement==null ) mMovement = new MovementPyraminx(); |
|
379 |
if( mMovement==null ) |
|
380 |
{ |
|
381 |
int numLayers = getNumLayers(); |
|
382 |
if( mCuts==null ) getCuts(numLayers); |
|
383 |
getLayerRotatable(numLayers); |
|
384 |
|
|
385 |
mMovement = new MovementPyraminx(mCuts,mLayerRotatable,numLayers); |
|
386 |
} |
|
361 | 387 |
return mMovement; |
362 | 388 |
} |
363 | 389 |
|
Also available in: Unified diff
Abstract the next function, computeRowFromOffset(), out of the individual Movement classes.
Still two issues:
1) mysterious 1.5 multiplier in Movement12
2) in Movement8, moving the offset works only if the rotAxis are face-turning, i.e. they connect the centers of the opposing faces of the octahedron.