Revision ede1b68c
Added by Leszek Koltunski over 3 years ago
src/main/java/org/distorted/objects/TwistyMegaminx.java | ||
---|---|---|
34 | 34 |
import org.distorted.main.RubikSurfaceView; |
35 | 35 |
|
36 | 36 |
import static org.distorted.objects.FactoryCubit.COS18; |
37 |
import static org.distorted.objects.FactoryCubit.COS54; |
|
37 | 38 |
import static org.distorted.objects.FactoryCubit.SIN18; |
39 |
import static org.distorted.objects.FactoryCubit.SIN54; |
|
38 | 40 |
|
39 | 41 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
40 | 42 |
|
... | ... | |
196 | 198 |
float[] getCuts(int numLayers) |
197 | 199 |
{ |
198 | 200 |
float[] cuts = new float[numLayers-1]; |
199 |
float D = (numLayers/3.0f)*MovementMinx.DIST3D;
|
|
201 |
float D = numLayers*MovementMinx.DIST3D;
|
|
200 | 202 |
float E = 2*C1; // 2*cos(36 deg) |
201 | 203 |
float X = 2*D*E/(1+2*E); // height of the 'upper' part of a dodecahedron, i.e. put it on a table, |
202 |
// its height is then 2*DIST3D, it has one 'lower' part of height X, one |
|
204 |
// its height is then D*2*DIST3D, it has one 'lower' part of height X, one
|
|
203 | 205 |
// 'middle' part of height Y and one upper part of height X again. |
204 | 206 |
// It's edge length = numLayers/3.0f. |
205 | 207 |
int num = (numLayers-1)/2; |
... | ... | |
207 | 209 |
|
208 | 210 |
for(int i=0; i<num; i++) |
209 | 211 |
{ |
210 |
cuts[ i] = -MovementMinx.DIST3D + (i+0.5f)*G;
|
|
212 |
cuts[ i] = -D + (i+0.5f)*G; |
|
211 | 213 |
cuts[2*num-1-i] = -cuts[i]; |
212 | 214 |
} |
213 | 215 |
|
... | ... | |
511 | 513 |
|
512 | 514 |
void createFaceTexture(Canvas canvas, Paint paint, int face, int left, int top) |
513 | 515 |
{ |
514 |
paint.setColor(FACE_COLORS[face%NUM_FACES]); |
|
515 |
paint.setStyle(Paint.Style.FILL); |
|
516 |
canvas.drawRect(left,top,left+TEXTURE_HEIGHT,top+TEXTURE_HEIGHT,paint); |
|
516 |
int COLORS = FACE_COLORS.length; |
|
517 |
float R,S; |
|
518 |
float[] vertices; |
|
519 |
|
|
520 |
int variant = face/COLORS; |
|
521 |
|
|
522 |
if( variant==0 ) |
|
523 |
{ |
|
524 |
float Y = COS54/(2*SIN54); |
|
525 |
R = 0.05f; |
|
526 |
S = 0.06f; |
|
527 |
vertices = new float[] { -0.5f, 0.0f, 0.0f, -Y, 0.5f, 0.0f, 0.0f, Y }; |
|
528 |
} |
|
529 |
else |
|
530 |
{ |
|
531 |
int numLayers = getNumLayers(); |
|
532 |
float height= (numLayers/3.0f)*(0.5f-MEGA_D)*COS18/((numLayers-1)*0.5f); |
|
533 |
float W = height*SIN18/COS18; |
|
534 |
float width = (numLayers/3.0f)*2*MEGA_D + 2*(variant-1)*W; |
|
535 |
|
|
536 |
if( variant < (numLayers+1)/2 ) |
|
537 |
{ |
|
538 |
float X1 = 0.5f*height; |
|
539 |
float Y1 = 0.5f*width; |
|
540 |
float Y2 = 0.5f*width + W; |
|
541 |
|
|
542 |
R = 0.04f; |
|
543 |
S = 0.055f; |
|
544 |
vertices = new float[] { -X1, Y1, -X1, -Y1, X1, -Y2, X1, Y2 }; |
|
545 |
} |
|
546 |
else |
|
547 |
{ |
|
548 |
float Z = width/(2*COS54); |
|
549 |
float X1 = 0.5f*width; |
|
550 |
float Y1 = Z*SIN54; |
|
551 |
float X2 = Z*COS18; |
|
552 |
float Y2 = Z*SIN18; |
|
553 |
|
|
554 |
R = 0.05f; |
|
555 |
S = 0.05f; |
|
556 |
vertices = new float[] { -X1,+Y1, -X2,-Y2, 0.0f,-Z, +X2,-Y2, +X1,+Y1 }; |
|
557 |
} |
|
558 |
} |
|
559 |
|
|
560 |
FactorySticker factory = FactorySticker.getInstance(); |
|
561 |
factory.drawRoundedPolygon(canvas, paint, left, top, vertices, S, FACE_COLORS[face%COLORS], R); |
|
517 | 562 |
} |
518 | 563 |
|
519 | 564 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
Also available in: Unified diff
Progress with Megaminx.