Revision 12313693
Added by Leszek Koltunski over 3 years ago
src/main/java/org/distorted/objects/MovementMinx.java | ||
---|---|---|
20 | 20 |
package org.distorted.objects; |
21 | 21 |
|
22 | 22 |
import org.distorted.library.type.Static3D; |
23 |
import static org.distorted.objects.TwistyMinx.C1; |
|
24 |
import static org.distorted.objects.TwistyMinx.C2; |
|
25 |
import static org.distorted.objects.TwistyMinx.LEN; |
|
26 |
import static org.distorted.objects.FactoryCubit.SIN54; |
|
27 |
import static org.distorted.objects.FactoryCubit.COS54; |
|
28 |
import static org.distorted.objects.TwistyObject.SQ5; |
|
23 | 29 |
|
24 | 30 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
25 | 31 |
|
26 | 32 |
class MovementMinx extends Movement |
27 | 33 |
{ |
28 |
static final float DIST3D = 0.25f;
|
|
29 |
static final float DIST2D = 0.25f;
|
|
34 |
static final float DIST3D = (float)Math.sqrt(0.625f+0.275f*SQ5)/3;
|
|
35 |
static final float DIST2D = (0.5f*SIN54/COS54)/3;
|
|
30 | 36 |
|
31 | 37 |
static final Static3D[] FACE_AXIS = new Static3D[] |
32 | 38 |
{ |
33 |
new Static3D(1,0,0), new Static3D(-1,0,0), |
|
34 |
new Static3D(0,1,0), new Static3D(0,-1,0), |
|
35 |
new Static3D(0,0,1), new Static3D(0,0,-1) |
|
39 |
new Static3D( C2/LEN, C1/LEN, 0 ), |
|
40 |
new Static3D( C2/LEN,-C1/LEN, 0 ), |
|
41 |
new Static3D(-C2/LEN, C1/LEN, 0 ), |
|
42 |
new Static3D(-C2/LEN,-C1/LEN, 0 ), |
|
43 |
new Static3D( 0 , C2/LEN, C1/LEN ), |
|
44 |
new Static3D( 0 , C2/LEN,-C1/LEN ), |
|
45 |
new Static3D( 0 ,-C2/LEN, C1/LEN ), |
|
46 |
new Static3D( 0 ,-C2/LEN,-C1/LEN ), |
|
47 |
new Static3D( C1/LEN, 0 , C2/LEN ), |
|
48 |
new Static3D( C1/LEN, 0 ,-C2/LEN ), |
|
49 |
new Static3D(-C1/LEN, 0 , C2/LEN ), |
|
50 |
new Static3D(-C1/LEN, 0 ,-C2/LEN ) |
|
36 | 51 |
}; |
37 | 52 |
|
38 | 53 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
... | ... | |
46 | 61 |
|
47 | 62 |
int computeRowFromOffset(int face, int size, float offset) |
48 | 63 |
{ |
49 |
return offset<DIST2D ? 0:1;
|
|
64 |
return offset<DIST2D ? 0:2;
|
|
50 | 65 |
} |
51 | 66 |
|
52 | 67 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
... | ... | |
57 | 72 |
} |
58 | 73 |
|
59 | 74 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
60 |
// faces 0,1,2,3 --> / |
|
61 |
// faces 4,5 --> \ |
|
62 |
|
|
63 |
private boolean isTopHalf(int face, float[] touchPoint) |
|
64 |
{ |
|
65 |
if( face==4 || face==5 ) return touchPoint[1] >=-touchPoint[0]; |
|
66 |
else return touchPoint[1] >= touchPoint[0]; |
|
67 |
} |
|
68 |
|
|
69 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
|
75 |
// TODO; approximation |
|
70 | 76 |
|
71 | 77 |
boolean isInsideFace(int face, float[] p) |
72 | 78 |
{ |
73 |
return ( p[0]<=DIST2D && p[0]>=-DIST2D && p[1]<=DIST2D && p[1]>=-DIST2D );
|
|
79 |
return ( p[0]*p[0] + p[1]*p[1] <= 1/(4*COS54*COS54) );
|
|
74 | 80 |
} |
75 | 81 |
|
76 | 82 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
77 |
// 0 +++ |
|
78 |
// 1 ++- |
|
79 |
// 2 +-+ |
|
80 |
// 3 +-- |
|
81 | 83 |
|
82 | 84 |
void computeEnabledAxis(int face, float[] touchPoint, int[] enabled) |
83 | 85 |
{ |
84 |
enabled[0] = 1; |
|
85 |
|
|
86 |
boolean isTop = isTopHalf(face,touchPoint); |
|
86 |
enabled[0] = 5; |
|
87 | 87 |
|
88 | 88 |
switch(face) |
89 | 89 |
{ |
90 |
case 0: enabled[1] = isTop ? 0:3; break; |
|
91 |
case 1: enabled[1] = isTop ? 2:1; break; |
|
92 |
case 2: enabled[1] = isTop ? 2:0; break; |
|
93 |
case 3: enabled[1] = isTop ? 1:3; break; |
|
94 |
case 4: enabled[1] = isTop ? 0:1; break; |
|
95 |
case 5: enabled[1] = isTop ? 2:3; break; |
|
90 |
case 0: |
|
91 |
case 3: enabled[1]=1; enabled[2]=2; enabled[3]=3; enabled[4]=4; enabled[5]=5; break; |
|
92 |
case 1: |
|
93 |
case 2: enabled[1]=0; enabled[2]=2; enabled[3]=3; enabled[4]=4; enabled[5]=5; break; |
|
94 |
case 4: |
|
95 |
case 7: enabled[1]=0; enabled[2]=1; enabled[3]=3; enabled[4]=4; enabled[5]=5; break; |
|
96 |
case 5: |
|
97 |
case 6: enabled[1]=0; enabled[2]=1; enabled[3]=2; enabled[4]=4; enabled[5]=5; break; |
|
98 |
case 8: |
|
99 |
case 11: enabled[1]=0; enabled[2]=1; enabled[3]=2; enabled[4]=3; enabled[5]=5; break; |
|
100 |
case 9: |
|
101 |
case 10: enabled[1]=0; enabled[2]=1; enabled[3]=2; enabled[4]=3; enabled[5]=4; break; |
|
96 | 102 |
} |
97 | 103 |
} |
98 | 104 |
} |
Also available in: Unified diff
Progress with the Kilominx movement (still not working)