Revision bb11be2a
Added by Leszek Koltunski about 3 years ago
src/main/java/org/distorted/objects/TwistyMinx.java | ||
---|---|---|
31 | 31 |
|
32 | 32 |
import java.util.Random; |
33 | 33 |
|
34 |
import static org.distorted.helpers.FactoryCubit.COS18; |
|
35 |
import static org.distorted.helpers.FactoryCubit.COS_HALFD; |
|
36 |
import static org.distorted.helpers.FactoryCubit.SIN18; |
|
37 |
import static org.distorted.helpers.FactoryCubit.SIN54; |
|
38 |
import static org.distorted.helpers.FactoryCubit.SIN_HALFD; |
|
39 |
|
|
40 | 34 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
41 | 35 |
|
42 | 36 |
abstract class TwistyMinx extends TwistyObject |
... | ... | |
47 | 41 |
static final int NUM_CENTERS = 12; |
48 | 42 |
static final int NUM_EDGES = 30; |
49 | 43 |
|
50 |
static final float C0 = (SQ5-1)/4; // cos(72 deg) |
|
51 |
static final float C1 = (SQ5+1)/4; // cos(36 deg) |
|
52 |
static final float C2 = (SQ5+3)/4; |
|
53 |
static final float LEN= (float)(Math.sqrt(1.25f+0.5f*SQ5)); |
|
44 |
static final float C2 = (SQ5+3)/4; |
|
45 |
static final float LEN = (float)(Math.sqrt(1.25f+0.5f*SQ5)); |
|
46 |
static final float SIN54 = (SQ5+1)/4; |
|
47 |
static final float COS54 = (float)(Math.sqrt(10-2*SQ5)/4); |
|
48 |
static final float SIN18 = (SQ5-1)/4; |
|
49 |
static final float COS18 = (float)(0.25f*Math.sqrt(10.0f+2.0f*SQ5)); |
|
50 |
static final float COS_HALFD= (float)(Math.sqrt(0.5f-0.1f*SQ5)); // cos(half the dihedral angle) |
|
51 |
static final float SIN_HALFD= (float)(Math.sqrt(0.5f+0.1f*SQ5)); // sin(half the dihedral angle) |
|
54 | 52 |
|
55 | 53 |
// the six rotation axis of a Minx. Must be normalized. |
56 | 54 |
static final Static3D[] ROT_AXIS = new Static3D[] |
57 | 55 |
{ |
58 |
new Static3D( C2/LEN, C1/LEN, 0 ),
|
|
59 |
new Static3D(-C2/LEN, C1/LEN, 0 ),
|
|
60 |
new Static3D( 0 , C2/LEN, C1/LEN ),
|
|
61 |
new Static3D( 0 ,-C2/LEN, C1/LEN ),
|
|
62 |
new Static3D( C1/LEN, 0 , C2/LEN ),
|
|
63 |
new Static3D( C1/LEN, 0 ,-C2/LEN )
|
|
56 |
new Static3D( C2/LEN, SIN54/LEN, 0 ),
|
|
57 |
new Static3D( -C2/LEN, SIN54/LEN, 0 ),
|
|
58 |
new Static3D( 0 , C2/LEN, SIN54/LEN ),
|
|
59 |
new Static3D( 0 , -C2/LEN, SIN54/LEN ),
|
|
60 |
new Static3D( SIN54/LEN, 0 , C2/LEN ),
|
|
61 |
new Static3D( SIN54/LEN, 0 , -C2/LEN )
|
|
64 | 62 |
}; |
65 | 63 |
|
66 | 64 |
private static final int MINX_LGREEN = 0xff53aa00; |
... | ... | |
100 | 98 |
new Static4D( -0.5f, -0.5f, 0.5f, 0.5f ), |
101 | 99 |
new Static4D( -0.5f, -0.5f, -0.5f, 0.5f ), |
102 | 100 |
|
103 |
new Static4D( 0.5f, C1, C0, 0.0f ), // 12
|
|
104 |
new Static4D( 0.5f, C1, -C0, 0.0f ),
|
|
105 |
new Static4D( 0.5f, -C1, C0, 0.0f ),
|
|
106 |
new Static4D( 0.5f, -C1, -C0, 0.0f ),
|
|
107 |
new Static4D( C0, 0.5f, C1, 0.0f ),
|
|
108 |
new Static4D( C0, 0.5f, -C1, 0.0f ),
|
|
109 |
new Static4D( -C0, 0.5f, C1, 0.0f ),
|
|
110 |
new Static4D( -C0, 0.5f, -C1, 0.0f ),
|
|
111 |
new Static4D( C1, C0, 0.5f, 0.0f ),
|
|
112 |
new Static4D( C1, -C0, 0.5f, 0.0f ),
|
|
113 |
new Static4D( -C1, C0, 0.5f, 0.0f ),
|
|
114 |
new Static4D( -C1, -C0, 0.5f, 0.0f ),
|
|
115 |
|
|
116 |
new Static4D( 0.0f, C0, C1, 0.5f ), //24
|
|
117 |
new Static4D( 0.0f, C0, -C1, 0.5f ),
|
|
118 |
new Static4D( 0.0f, -C0, C1, 0.5f ),
|
|
119 |
new Static4D( 0.0f, -C0, -C1, 0.5f ),
|
|
120 |
new Static4D( C0, C1, 0.0f, 0.5f ),
|
|
121 |
new Static4D( C0, -C1, 0.0f, 0.5f ),
|
|
122 |
new Static4D( -C0, C1, 0.0f, 0.5f ),
|
|
123 |
new Static4D( -C0, -C1, 0.0f, 0.5f ),
|
|
124 |
new Static4D( C1, 0.0f, C0, 0.5f ),
|
|
125 |
new Static4D( C1, 0.0f, -C0, 0.5f ),
|
|
126 |
new Static4D( -C1, 0.0f, C0, 0.5f ),
|
|
127 |
new Static4D( -C1, 0.0f, -C0, 0.5f ),
|
|
128 |
|
|
129 |
new Static4D( 0.0f, C1, 0.5f, C0 ), //36
|
|
130 |
new Static4D( 0.0f, C1, -0.5f, C0 ),
|
|
131 |
new Static4D( 0.0f, -C1, 0.5f, C0 ),
|
|
132 |
new Static4D( 0.0f, -C1, -0.5f, C0 ),
|
|
133 |
new Static4D( 0.5f, 0.0f, C1, C0 ),
|
|
134 |
new Static4D( 0.5f, 0.0f, -C1, C0 ),
|
|
135 |
new Static4D( -0.5f, 0.0f, C1, C0 ),
|
|
136 |
new Static4D( -0.5f, 0.0f, -C1, C0 ),
|
|
137 |
new Static4D( C1, 0.5f, 0.0f, C0 ),
|
|
138 |
new Static4D( C1, -0.5f, 0.0f, C0 ),
|
|
139 |
new Static4D( -C1, 0.5f, 0.0f, C0 ),
|
|
140 |
new Static4D( -C1, -0.5f, 0.0f, C0 ),
|
|
141 |
|
|
142 |
new Static4D( 0.0f, 0.5f, C0, C1 ), //48
|
|
143 |
new Static4D( 0.0f, 0.5f, -C0, C1 ),
|
|
144 |
new Static4D( 0.0f, -0.5f, C0, C1 ),
|
|
145 |
new Static4D( 0.0f, -0.5f, -C0, C1 ),
|
|
146 |
new Static4D( 0.5f, C0, 0.0f, C1 ),
|
|
147 |
new Static4D( 0.5f, -C0, 0.0f, C1 ),
|
|
148 |
new Static4D( -0.5f, C0, 0.0f, C1 ),
|
|
149 |
new Static4D( -0.5f, -C0, 0.0f, C1 ),
|
|
150 |
new Static4D( C0, 0.0f, 0.5f, C1 ),
|
|
151 |
new Static4D( C0, 0.0f, -0.5f, C1 ),
|
|
152 |
new Static4D( -C0, 0.0f, 0.5f, C1 ),
|
|
153 |
new Static4D( -C0, 0.0f, -0.5f, C1 ),
|
|
101 |
new Static4D( 0.5f, SIN54, SIN18, 0.0f ), // 12
|
|
102 |
new Static4D( 0.5f, SIN54,-SIN18, 0.0f ),
|
|
103 |
new Static4D( 0.5f,-SIN54, SIN18, 0.0f ),
|
|
104 |
new Static4D( 0.5f,-SIN54,-SIN18, 0.0f ),
|
|
105 |
new Static4D( SIN18, 0.5f, SIN54, 0.0f ),
|
|
106 |
new Static4D( SIN18, 0.5f,-SIN54, 0.0f ),
|
|
107 |
new Static4D(-SIN18, 0.5f, SIN54, 0.0f ),
|
|
108 |
new Static4D(-SIN18, 0.5f,-SIN54, 0.0f ),
|
|
109 |
new Static4D( SIN54, SIN18, 0.5f, 0.0f ),
|
|
110 |
new Static4D( SIN54,-SIN18, 0.5f, 0.0f ),
|
|
111 |
new Static4D(-SIN54, SIN18, 0.5f, 0.0f ),
|
|
112 |
new Static4D(-SIN54,-SIN18, 0.5f, 0.0f ),
|
|
113 |
|
|
114 |
new Static4D( 0.0f, SIN18, SIN54, 0.5f ), //24
|
|
115 |
new Static4D( 0.0f, SIN18,-SIN54, 0.5f ),
|
|
116 |
new Static4D( 0.0f,-SIN18, SIN54, 0.5f ),
|
|
117 |
new Static4D( 0.0f,-SIN18,-SIN54, 0.5f ),
|
|
118 |
new Static4D( SIN18, SIN54, 0.0f, 0.5f ),
|
|
119 |
new Static4D( SIN18,-SIN54, 0.0f, 0.5f ),
|
|
120 |
new Static4D(-SIN18, SIN54, 0.0f, 0.5f ),
|
|
121 |
new Static4D(-SIN18,-SIN54, 0.0f, 0.5f ),
|
|
122 |
new Static4D( SIN54, 0.0f, SIN18, 0.5f ),
|
|
123 |
new Static4D( SIN54, 0.0f,-SIN18, 0.5f ),
|
|
124 |
new Static4D(-SIN54, 0.0f, SIN18, 0.5f ),
|
|
125 |
new Static4D(-SIN54, 0.0f,-SIN18, 0.5f ),
|
|
126 |
|
|
127 |
new Static4D( 0.0f, SIN54, 0.5f, SIN18 ), //36
|
|
128 |
new Static4D( 0.0f, SIN54, -0.5f, SIN18 ),
|
|
129 |
new Static4D( 0.0f,-SIN54, 0.5f, SIN18 ),
|
|
130 |
new Static4D( 0.0f,-SIN54, -0.5f, SIN18 ),
|
|
131 |
new Static4D( 0.5f, 0.0f, SIN54, SIN18 ),
|
|
132 |
new Static4D( 0.5f, 0.0f,-SIN54, SIN18 ),
|
|
133 |
new Static4D( -0.5f, 0.0f, SIN54, SIN18 ),
|
|
134 |
new Static4D( -0.5f, 0.0f,-SIN54, SIN18 ),
|
|
135 |
new Static4D( SIN54, 0.5f, 0.0f, SIN18 ),
|
|
136 |
new Static4D( SIN54, -0.5f, 0.0f, SIN18 ),
|
|
137 |
new Static4D(-SIN54, 0.5f, 0.0f, SIN18 ),
|
|
138 |
new Static4D(-SIN54, -0.5f, 0.0f, SIN18 ),
|
|
139 |
|
|
140 |
new Static4D( 0.0f, 0.5f, SIN18, SIN54 ), //48
|
|
141 |
new Static4D( 0.0f, 0.5f,-SIN18, SIN54 ),
|
|
142 |
new Static4D( 0.0f, -0.5f, SIN18, SIN54 ),
|
|
143 |
new Static4D( 0.0f, -0.5f,-SIN18, SIN54 ),
|
|
144 |
new Static4D( 0.5f, SIN18, 0.0f, SIN54 ),
|
|
145 |
new Static4D( 0.5f,-SIN18, 0.0f, SIN54 ),
|
|
146 |
new Static4D( -0.5f, SIN18, 0.0f, SIN54 ),
|
|
147 |
new Static4D( -0.5f,-SIN18, 0.0f, SIN54 ),
|
|
148 |
new Static4D( SIN18, 0.0f, 0.5f, SIN54 ),
|
|
149 |
new Static4D( SIN18, 0.0f, -0.5f, SIN54 ),
|
|
150 |
new Static4D(-SIN18, 0.0f, 0.5f, SIN54 ),
|
|
151 |
new Static4D(-SIN18, 0.0f, -0.5f, SIN54 ),
|
|
154 | 152 |
}; |
155 | 153 |
|
156 | 154 |
// Coordinates of all 20 corners of a Minx |
157 | 155 |
static final float[][] CORNERS = new float[][] |
158 | 156 |
{ |
159 |
{ 0.0f, 0.5f, C2},
|
|
160 |
{ 0.0f, 0.5f, -C2},
|
|
161 |
{ 0.0f,-0.5f, C2},
|
|
162 |
{ 0.0f,-0.5f, -C2},
|
|
163 |
{ C2, 0.0f, 0.5f},
|
|
164 |
{ C2, 0.0f,-0.5f},
|
|
165 |
{ -C2, 0.0f, 0.5f},
|
|
166 |
{ -C2, 0.0f,-0.5f},
|
|
167 |
{ 0.5f, C2, 0.0f},
|
|
168 |
{ 0.5f, -C2, 0.0f},
|
|
169 |
{-0.5f, C2, 0.0f},
|
|
170 |
{-0.5f, -C2, 0.0f},
|
|
171 |
{ C1, C1, C1},
|
|
172 |
{ C1, C1, -C1},
|
|
173 |
{ C1, -C1, C1},
|
|
174 |
{ C1, -C1, -C1},
|
|
175 |
{ -C1, C1, C1},
|
|
176 |
{ -C1, C1, -C1},
|
|
177 |
{ -C1, -C1, C1},
|
|
178 |
{ -C1, -C1, -C1},
|
|
157 |
{ 0.0f, 0.5f, C2},
|
|
158 |
{ 0.0f, 0.5f, -C2},
|
|
159 |
{ 0.0f, -0.5f, C2},
|
|
160 |
{ 0.0f, -0.5f, -C2},
|
|
161 |
{ C2, 0.0f, 0.5f},
|
|
162 |
{ C2, 0.0f, -0.5f},
|
|
163 |
{ -C2, 0.0f, 0.5f},
|
|
164 |
{ -C2, 0.0f, -0.5f},
|
|
165 |
{ 0.5f, C2, 0.0f},
|
|
166 |
{ 0.5f, -C2, 0.0f},
|
|
167 |
{ -0.5f, C2, 0.0f},
|
|
168 |
{ -0.5f, -C2, 0.0f},
|
|
169 |
{ SIN54, SIN54, SIN54},
|
|
170 |
{ SIN54, SIN54,-SIN54},
|
|
171 |
{ SIN54,-SIN54, SIN54},
|
|
172 |
{ SIN54,-SIN54,-SIN54},
|
|
173 |
{-SIN54, SIN54, SIN54},
|
|
174 |
{-SIN54, SIN54,-SIN54},
|
|
175 |
{-SIN54,-SIN54, SIN54},
|
|
176 |
{-SIN54,-SIN54,-SIN54},
|
|
179 | 177 |
}; |
180 | 178 |
|
181 | 179 |
static final int[][] mCornerFaceMap = |
Also available in: Unified diff
New cubit engine: finish converting Kilominx & Megaminx.