Revision ef018c1b
Added by Leszek Koltunski over 2 years ago
src/main/java/org/distorted/objects/TwistyDiamond.java | ||
---|---|---|
47 | 47 |
private ScrambleState[] mStates; |
48 | 48 |
private int[] mBasicAngle; |
49 | 49 |
private int[] mFaceMap; |
50 |
private float[][] mCuts; |
|
51 |
private boolean[][] mLayerRotatable; |
|
50 | 52 |
private Static4D[] mQuats; |
51 | 53 |
private int[] mTetraToFaceMap; |
52 | 54 |
private ObjectSticker[] mStickers; |
... | ... | |
143 | 145 |
|
144 | 146 |
float[][] getCuts(int numLayers) |
145 | 147 |
{ |
146 |
if( numLayers<2 ) |
|
147 |
{ |
|
148 |
return null; |
|
149 |
} |
|
150 |
else |
|
148 |
if( numLayers<2 ) return null; |
|
149 |
|
|
150 |
if( mCuts==null ) |
|
151 | 151 |
{ |
152 |
float[][] cuts = new float[4][numLayers-1]; |
|
153 |
float dist = SQ6/3; |
|
154 |
float cut = 0.5f*dist*(2-numLayers); |
|
152 |
mCuts = new float[4][numLayers-1]; |
|
153 |
float cut = (SQ6/6)*(2-numLayers); |
|
155 | 154 |
|
156 | 155 |
for(int i=0; i<numLayers-1; i++) |
157 | 156 |
{ |
158 |
cuts[0][i] = cut;
|
|
159 |
cuts[1][i] = cut;
|
|
160 |
cuts[2][i] = cut;
|
|
161 |
cuts[3][i] = cut;
|
|
162 |
cut += dist;
|
|
157 |
mCuts[0][i] = cut;
|
|
158 |
mCuts[1][i] = cut;
|
|
159 |
mCuts[2][i] = cut;
|
|
160 |
mCuts[3][i] = cut;
|
|
161 |
cut += SQ6/3;
|
|
163 | 162 |
} |
163 |
} |
|
164 |
|
|
165 |
return mCuts; |
|
166 |
} |
|
164 | 167 |
|
165 |
return cuts; |
|
168 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
|
169 |
|
|
170 |
private void getLayerRotatable(int numLayers) |
|
171 |
{ |
|
172 |
if( mLayerRotatable==null ) |
|
173 |
{ |
|
174 |
int numAxis = ROT_AXIS.length; |
|
175 |
boolean[] tmp = new boolean[numLayers]; |
|
176 |
for(int i=0; i<numLayers; i++) tmp[i] = true; |
|
177 |
mLayerRotatable = new boolean[numAxis][]; |
|
178 |
for(int i=0; i<numAxis; i++) mLayerRotatable[i] = tmp; |
|
166 | 179 |
} |
167 | 180 |
} |
168 | 181 |
|
... | ... | |
479 | 492 |
|
480 | 493 |
public Movement getMovement() |
481 | 494 |
{ |
482 |
if( mMovement==null ) mMovement = new MovementDiamond(); |
|
495 |
if( mMovement==null ) |
|
496 |
{ |
|
497 |
int numLayers = getNumLayers(); |
|
498 |
if( mCuts==null ) getCuts(numLayers); |
|
499 |
getLayerRotatable(numLayers); |
|
500 |
|
|
501 |
mMovement = new MovementDiamond(mCuts,mLayerRotatable,numLayers); |
|
502 |
} |
|
483 | 503 |
return mMovement; |
484 | 504 |
} |
485 | 505 |
|
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.