Project

General

Profile

Download (5.54 KB) Statistics
| Branch: | Revision:

distorted-objectlib / src / main / java / org / distorted / objectlib / tablebases / TablebasesPyraminxDuo.java @ 739a64d4

1 a110ebe1 Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////
2
// Copyright 2023 Leszek Koltunski                                                               //
3
//                                                                                               //
4
// This file is part of Magic Cube.                                                              //
5
//                                                                                               //
6
// Magic Cube is proprietary software licensed under an EULA which you should have received      //
7
// along with the code. If not, check https://distorted.org/magic/License-Magic-Cube.html        //
8
///////////////////////////////////////////////////////////////////////////////////////////////////
9
10
package org.distorted.objectlib.tablebases;
11
12
import static org.distorted.objectlib.main.TwistyObject.SQ2;
13 ccd8a6f2 Leszek Koltunski
import static org.distorted.objectlib.main.TwistyObject.SQ3;
14
import static org.distorted.objectlib.main.TwistyObject.SQ6;
15 a110ebe1 Leszek Koltunski
16 352b3356 Leszek Koltunski
import android.content.res.Resources;
17
18 a110ebe1 Leszek Koltunski
import org.distorted.library.type.Static3D;
19
20
///////////////////////////////////////////////////////////////////////////////////////////////////
21
22 1725b607 Leszek Koltunski
public class TablebasesPyraminxDuo extends TablebasesAbstract
23 a110ebe1 Leszek Koltunski
{
24 352b3356 Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////
25
26
  public TablebasesPyraminxDuo()
27
    {
28
    super();
29
    }
30
31
///////////////////////////////////////////////////////////////////////////////////////////////////
32
33 1725b607 Leszek Koltunski
  public TablebasesPyraminxDuo(Resources res)
34 352b3356 Leszek Koltunski
    {
35 1725b607 Leszek Koltunski
    super(res,org.distorted.objectlib.R.raw.pduo_2_tablebase);
36 352b3356 Leszek Koltunski
    }
37
38
///////////////////////////////////////////////////////////////////////////////////////////////////
39
40 a110ebe1 Leszek Koltunski
  int[][] getBasicAngles()
41
    {
42
    int[] tmp = {3,3};
43
    return new int[][] { tmp,tmp,tmp,tmp };
44
    }
45
46
///////////////////////////////////////////////////////////////////////////////////////////////////
47
48
  Static3D[] getRotationAxis()
49
    {
50 ccd8a6f2 Leszek Koltunski
    return new Static3D[]
51
         {
52
           new Static3D(     0,-SQ3/3,-SQ6/3),
53
           new Static3D(     0,-SQ3/3, SQ6/3),
54
           new Static3D( SQ6/3, SQ3/3,     0),
55
           new Static3D(-SQ6/3, SQ3/3,     0),
56
         };
57 a110ebe1 Leszek Koltunski
    }
58
59
///////////////////////////////////////////////////////////////////////////////////////////////////
60
61
  float[][] getPosition()
62
    {
63
    return new float[][]
64
         {
65
           { 0.000f, -SQ2/2, 1.000f },
66
           { 0.000f, -SQ2/2,-1.000f },
67
           {-1.000f,  SQ2/2, 0.000f },
68
           { 1.000f,  SQ2/2, 0.000f },
69
70
           { 0.000f,  SQ2/6, 1.0f/3 },
71
           { 0.000f,  SQ2/6,-1.0f/3 },
72
           {-1.0f/3, -SQ2/6, 0.000f },
73
           { 1.0f/3, -SQ2/6, 0.000f },
74
         };
75
    }
76
77
///////////////////////////////////////////////////////////////////////////////////////////////////
78
79
  float[][] getCuts()
80
    {
81
    float[] cut = { 0.0f };
82
    return new float[][] { cut,cut,cut,cut };
83
    }
84
85 b4111717 Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////
86
87
  boolean[][] getRotatable()
88
    {
89
    boolean[] tmp = new boolean[] {false,true};
90
    return new boolean[][] { tmp,tmp,tmp,tmp };
91
    }
92
93 a110ebe1 Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////
94
// specifically for the tablebase
95
///////////////////////////////////////////////////////////////////////////////////////////////////
96
97
  int getSize()
98
    {
99
    return 324;  // see https://www.jaapsch.net/puzzles/pyraduo.htm
100
    }
101
102
///////////////////////////////////////////////////////////////////////////////////////////////////
103
104
  int[] getQuats(int index)
105
    {
106
    int c = index%4; index/=4;
107
    int b3= index%3; index/=3;
108
    int b2= index%3; index/=3;
109
    int b1= index%3; index/=3;
110
    int b0= index%3;
111
112
    // we don't need to care about the values of the last 3 quats, but do include them.
113
    int[] quats = new int[8];
114
115
    switch(c)
116
      {
117
      case 0: quats[4] = 2; break;
118 b4111717 Leszek Koltunski
      case 1: quats[4] = 5; break;
119 a110ebe1 Leszek Koltunski
      case 2: quats[4] = 4; break;
120 b4111717 Leszek Koltunski
      case 3: quats[4] = 3; break;
121 a110ebe1 Leszek Koltunski
      }
122
123
    switch(b3)
124
      {
125
      case 0: quats[3] = 0; break;
126
      case 1: quats[3] = 5; break;
127
      case 2: quats[3] = 6; break;
128
      }
129
130
    switch(b2)
131
      {
132
      case 0: quats[2] = 0; break;
133
      case 1: quats[2] = 7; break;
134
      case 2: quats[2] = 8; break;
135
      }
136
137
    switch(b1)
138
      {
139
      case 0: quats[1] = 0; break;
140
      case 1: quats[1] = 1; break;
141
      case 2: quats[1] = 2; break;
142
      }
143
144
    switch(b0)
145
      {
146
      case 0: quats[0] = 0; break;
147
      case 1: quats[0] = 3; break;
148
      case 2: quats[0] = 4; break;
149
      }
150
151
    return quats;
152
    }
153
154
///////////////////////////////////////////////////////////////////////////////////////////////////
155
156
  private int computeCornerTwistFromQuat(int quat)
157
    {
158
    switch(quat)
159
      {
160
      case 0: case 9: case 10: case 11: return 0;
161
      case 1: case 3: case  5: case  7: return 1;
162
      case 2: case 4: case  6: case  8: return 2;
163
      }
164
165
    return -1;
166
    }
167
168
///////////////////////////////////////////////////////////////////////////////////////////////////
169
170
  int getIndex(int[] quats)
171
    {
172
    int b0 = computeCornerTwistFromQuat(quats[0]);
173
    int b1 = computeCornerTwistFromQuat(quats[1]);
174
    int b2 = computeCornerTwistFromQuat(quats[2]);
175
    int b3 = computeCornerTwistFromQuat(quats[3]);
176
177
    int c = -1;
178
    switch(quats[4])
179
      {
180
      case  0: case  1: case  2: c=0; break;
181 b4111717 Leszek Koltunski
      case  5: case  8: case 10: c=1; break;
182 a110ebe1 Leszek Koltunski
      case  4: case  7: case 11: c=2; break;
183 b4111717 Leszek Koltunski
      case  3: case  6: case  9: c=3; break;
184 a110ebe1 Leszek Koltunski
      }
185
186 b4111717 Leszek Koltunski
    return c + 4*(b3 + 3*(b2 + 3*(b1 + 3*b0)));
187 a110ebe1 Leszek Koltunski
    }
188
}