Project

General

Profile

« Previous | Next » 

Revision bb11be2a

Added by Leszek Koltunski about 3 years ago

New cubit engine: finish converting Kilominx & Megaminx.

View differences:

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