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 |
///////////////////////////////////////////////////////////////////////////////////////////////////
|
Progress with Megaminx.