Project

General

Profile

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

distorted-objectlib / src / main / java / org / distorted / objectlib / tablebases / TablebasesSkewbDiamond.java @ 522d858e

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
import static org.distorted.objectlib.main.TwistyObject.SQ3;
14
import static org.distorted.objectlib.main.TwistyObject.SQ6;
15

    
16
import android.content.res.Resources;
17

    
18
import org.distorted.library.type.Static3D;
19
import org.distorted.objectlib.R;
20

    
21
///////////////////////////////////////////////////////////////////////////////////////////////////
22

    
23
public class TablebasesSkewbDiamond extends TablebasesAbstract
24
{
25
  public TablebasesSkewbDiamond()
26
    {
27
    super();
28
    }
29

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

    
32
  public TablebasesSkewbDiamond(Resources res)
33
    {
34
    super(res, R.raw.pyra_3_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 new Static3D[]
50
         {
51
           new Static3D( SQ6/3, SQ3/3,     0),
52
           new Static3D(-SQ6/3, SQ3/3,     0),
53
           new Static3D(     0,-SQ3/3,-SQ6/3),
54
           new Static3D(     0,-SQ3/3, SQ6/3)
55
         };
56
    }
57

    
58
///////////////////////////////////////////////////////////////////////////////////////////////////
59

    
60
  float[][] getPosition()
61
    {
62
    return new float[][]
63
         {
64
             { 0.5f, 0.0f,  0.5f},
65
             { 0.5f, 0.0f, -0.5f},
66
             {-0.5f, 0.0f, -0.5f},
67
             {-0.5f, 0.0f,  0.5f},
68
             { 0.0f, SQ2/2, 0.0f},
69
             { 0.0f,-SQ2/2, 0.0f},
70

    
71
             { 0.5f, SQ2/4, 0.0f},
72
             { 0.0f, SQ2/4,-0.5f},
73
             {-0.5f, SQ2/4, 0.0f},
74
             { 0.0f, SQ2/4, 0.5f},
75
             { 0.5f,-SQ2/4, 0.0f},
76
             { 0.0f,-SQ2/4,-0.5f},
77
             {-0.5f,-SQ2/4, 0.0f},
78
             { 0.0f,-SQ2/4, 0.5f}
79
         };
80
    }
81

    
82
///////////////////////////////////////////////////////////////////////////////////////////////////
83

    
84
  float[][] getCuts()
85
    {
86
    float[] cut = { 0.0f };
87
    return new float[][] { cut,cut,cut,cut };
88
    }
89

    
90
///////////////////////////////////////////////////////////////////////////////////////////////////
91

    
92
  boolean[][] getRotatable()
93
    {
94
    boolean[] tmp = new boolean[] {false,true};
95
    return new boolean[][] { tmp,tmp,tmp,tmp };
96
    }
97

    
98
///////////////////////////////////////////////////////////////////////////////////////////////////
99
// specifically for the tablebase
100
///////////////////////////////////////////////////////////////////////////////////////////////////
101

    
102
  int getSize()
103
    {
104
    return 138240;  // see https://www.jaapsch.net/puzzles/diamond.htm
105
    }
106

    
107
///////////////////////////////////////////////////////////////////////////////////////////////////
108

    
109
  private int computeCenterQuat(int originalLocation, int newLocation)
110
    {
111
    return 0;
112
    }
113

    
114
///////////////////////////////////////////////////////////////////////////////////////////////////
115

    
116
  private int computeCornerQuat(int originalLocation, int newLocation, int twist)
117
    {
118
    return 0;
119
    }
120

    
121
///////////////////////////////////////////////////////////////////////////////////////////////////
122

    
123
  private int[] computeCenterPerm(int q0, int q1, int q2, int q3)
124
    {
125
    return null;
126
    }
127

    
128
///////////////////////////////////////////////////////////////////////////////////////////////////
129

    
130
  private int computeCornerPerm(int[] output, int[] quats)
131
    {
132
    return 0;
133
    }
134

    
135
///////////////////////////////////////////////////////////////////////////////////////////////////
136

    
137
  public int[] getQuats(int index)
138
    {
139
    int centers_perm_num = (index%12);
140
    index /= 12;
141
    int totalTwist = (index%128);
142
    int corners_perm_num = (index/128);
143

    
144
    int[] centers_perm = new int[4];
145
    TablebaseHelpers.getEvenPermutationFromNum(centers_perm,centers_perm_num);
146
    int[] corners_perm = new int[6];
147
    TablebaseHelpers.getEvenPermutationFromNum(corners_perm,corners_perm_num);
148

    
149
    int[] quats = new int[14];
150

    
151
    for(int i=0; i<6; i++)
152
      {
153
      int twist = (totalTwist%2);
154
      totalTwist /= 2;
155
      quats[i] = computeCornerQuat(i,corners_perm[i],twist);
156
      }
157

    
158
    quats[ 6] = computeCenterQuat(0,centers_perm[0]);
159
    quats[ 8] = computeCenterQuat(1,centers_perm[1]);
160
    quats[11] = computeCenterQuat(2,centers_perm[2]);
161
    quats[13] = computeCenterQuat(3,centers_perm[3]);
162

    
163
    return quats;
164
    }
165

    
166
///////////////////////////////////////////////////////////////////////////////////////////////////
167

    
168
  public int getIndex(int[] quats)
169
    {
170
    int[] center_perm = computeCenterPerm(quats[6],quats[8],quats[11],quats[13]);
171
    int centers_perm_num = TablebaseHelpers.computeEvenPermutationNum(center_perm);
172
    int[] corners_perm = new int[6];
173
    int totalTwist = computeCornerPerm(corners_perm,quats);
174
    int corners_perm_num = TablebaseHelpers.computeEvenPermutationNum(corners_perm);
175

    
176
    return centers_perm_num + 12*(totalTwist + 128*corners_perm_num);
177
    }
178
}  
179

    
(9-9/9)