Project

General

Profile

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

distorted-objectlib / src / main / java / org / distorted / objectlib / tablebases / TablebasesPyraminxDuo.java @ 971a184e

1
///////////////////////////////////////////////////////////////////////////////////////////////////
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

    
14
import android.content.res.Resources;
15

    
16
import org.distorted.library.type.Static3D;
17
import org.distorted.objectlib.objects.TwistyPyraminxDuo;
18

    
19
///////////////////////////////////////////////////////////////////////////////////////////////////
20

    
21
public class TablebasesPyraminxDuo extends TablebasesAbstract
22
{
23
///////////////////////////////////////////////////////////////////////////////////////////////////
24

    
25
  public TablebasesPyraminxDuo()
26
    {
27
    super();
28
    }
29

    
30
///////////////////////////////////////////////////////////////////////////////////////////////////
31

    
32
  public TablebasesPyraminxDuo(Resources res)
33
    {
34
    super(res,org.distorted.objectlib.R.raw.pduo_2_tablebase);
35
    }
36

    
37
///////////////////////////////////////////////////////////////////////////////////////////////////
38

    
39
  int[][] getBasicAngles()
40
    {
41
    int[] tmp = {3,3};
42
    return new int[][] { tmp,tmp,tmp,tmp };
43
    }
44

    
45
///////////////////////////////////////////////////////////////////////////////////////////////////
46

    
47
  Static3D[] getRotationAxis()
48
    {
49
    return TwistyPyraminxDuo.ROT_AXIS;
50
    }
51

    
52
///////////////////////////////////////////////////////////////////////////////////////////////////
53

    
54
  float[][] getPosition()
55
    {
56
    return new float[][]
57
         {
58
           { 0.000f, -SQ2/2, 1.000f },
59
           { 0.000f, -SQ2/2,-1.000f },
60
           {-1.000f,  SQ2/2, 0.000f },
61
           { 1.000f,  SQ2/2, 0.000f },
62

    
63
           { 0.000f,  SQ2/6, 1.0f/3 },
64
           { 0.000f,  SQ2/6,-1.0f/3 },
65
           {-1.0f/3, -SQ2/6, 0.000f },
66
           { 1.0f/3, -SQ2/6, 0.000f },
67
         };
68
    }
69

    
70
///////////////////////////////////////////////////////////////////////////////////////////////////
71

    
72
  float[][] getCuts()
73
    {
74
    float[] cut = { 0.0f };
75
    return new float[][] { cut,cut,cut,cut };
76
    }
77

    
78
///////////////////////////////////////////////////////////////////////////////////////////////////
79

    
80
  boolean[][] getRotatable()
81
    {
82
    boolean[] tmp = new boolean[] {false,true};
83
    return new boolean[][] { tmp,tmp,tmp,tmp };
84
    }
85

    
86
///////////////////////////////////////////////////////////////////////////////////////////////////
87
// specifically for the tablebase
88
///////////////////////////////////////////////////////////////////////////////////////////////////
89

    
90
  int getSize()
91
    {
92
    return 324;  // see https://www.jaapsch.net/puzzles/pyraduo.htm
93
    }
94

    
95
///////////////////////////////////////////////////////////////////////////////////////////////////
96

    
97
  int[] getQuats(int index)
98
    {
99
    int c = index%4; index/=4;
100
    int b3= index%3; index/=3;
101
    int b2= index%3; index/=3;
102
    int b1= index%3; index/=3;
103
    int b0= index%3;
104

    
105
    // we don't need to care about the values of the last 3 quats, but do include them.
106
    int[] quats = new int[8];
107

    
108
    switch(c)
109
      {
110
      case 0: quats[4] = 2; break;
111
      case 1: quats[4] = 5; break;
112
      case 2: quats[4] = 4; break;
113
      case 3: quats[4] = 3; break;
114
      }
115

    
116
    switch(b3)
117
      {
118
      case 0: quats[3] = 0; break;
119
      case 1: quats[3] = 5; break;
120
      case 2: quats[3] = 6; break;
121
      }
122

    
123
    switch(b2)
124
      {
125
      case 0: quats[2] = 0; break;
126
      case 1: quats[2] = 7; break;
127
      case 2: quats[2] = 8; break;
128
      }
129

    
130
    switch(b1)
131
      {
132
      case 0: quats[1] = 0; break;
133
      case 1: quats[1] = 1; break;
134
      case 2: quats[1] = 2; break;
135
      }
136

    
137
    switch(b0)
138
      {
139
      case 0: quats[0] = 0; break;
140
      case 1: quats[0] = 3; break;
141
      case 2: quats[0] = 4; break;
142
      }
143

    
144
    return quats;
145
    }
146

    
147
///////////////////////////////////////////////////////////////////////////////////////////////////
148

    
149
  private int computeCornerTwistFromQuat(int quat)
150
    {
151
    switch(quat)
152
      {
153
      case 0: case 9: case 10: case 11: return 0;
154
      case 1: case 3: case  5: case  7: return 1;
155
      case 2: case 4: case  6: case  8: return 2;
156
      }
157

    
158
    return -1;
159
    }
160

    
161
///////////////////////////////////////////////////////////////////////////////////////////////////
162

    
163
  int getIndex(int[] quats)
164
    {
165
    int b0 = computeCornerTwistFromQuat(quats[0]);
166
    int b1 = computeCornerTwistFromQuat(quats[1]);
167
    int b2 = computeCornerTwistFromQuat(quats[2]);
168
    int b3 = computeCornerTwistFromQuat(quats[3]);
169

    
170
    int c = -1;
171
    switch(quats[4])
172
      {
173
      case  0: case  1: case  2: c=0; break;
174
      case  5: case  8: case 10: c=1; break;
175
      case  4: case  7: case 11: c=2; break;
176
      case  3: case  6: case  9: c=3; break;
177
      }
178

    
179
    return c + 4*(b3 + 3*(b2 + 3*(b1 + 3*b0)));
180
    }
181
}  
182

    
(7-7/7)