Project

General

Profile

Download (5.28 KB) Statistics
| Branch: | Tag: | Revision:

magiccube / src / main / java / org / distorted / solvers / cube3 / FaceCube.java @ b95ceafc

1
package org.distorted.solvers.cube3;
2

    
3
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
4
//Cube on the facelet level
5
class FaceCube {
6
	public int[] f = new int[54];
7

    
8
	// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
9
	// Map the corner positions to facelet positions. cornerFacelet[URF.ordinal()][0] e.g. gives the position of the
10
	// facelet in the URF corner position, which defines the orientation.<br>
11
	// cornerFacelet[URF.ordinal()][1] and cornerFacelet[URF.ordinal()][2] give the position of the other two facelets
12
	// of the URF corner (clockwise).
13
	final static int[][] cornerFacelet =
14
          { { Facelet.U9, Facelet.R1, Facelet.F3 }, { Facelet.U7, Facelet.F1, Facelet.L3 },
15
            { Facelet.U1, Facelet.L1, Facelet.B3 }, { Facelet.U3, Facelet.B1, Facelet.R3 },
16
	    { Facelet.D3, Facelet.F9, Facelet.R7 }, { Facelet.D1, Facelet.L9, Facelet.F7 },
17
            { Facelet.D7, Facelet.B9, Facelet.L7 }, { Facelet.D9, Facelet.R9, Facelet.B7 } };
18

    
19
	// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
20
	// Map the edge positions to facelet positions. edgeFacelet[UR.ordinal()][0] e.g. gives the position of the facelet in
21
	// the UR edge position, which defines the orientation.<br>
22
	// edgeFacelet[UR.ordinal()][1] gives the position of the other facelet
23
	final static int[][] edgeFacelet =
24
          { { Facelet.U6, Facelet.R2 }, { Facelet.U8, Facelet.F2 }, { Facelet.U4, Facelet.L2 },
25
            { Facelet.U2, Facelet.B2 }, { Facelet.D6, Facelet.R8 }, { Facelet.D2, Facelet.F8 },
26
	    { Facelet.D4, Facelet.L8 }, { Facelet.D8, Facelet.B8 }, { Facelet.F6, Facelet.R4 },
27
            { Facelet.F4, Facelet.L6 }, { Facelet.B6, Facelet.L4 }, { Facelet.B4, Facelet.R6 } };
28

    
29
	// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
30
	// Map the corner positions to facelet colors.
31
	final static int[][] cornerColor =
32
          { { Color.U, Color.R, Color.F }, { Color.U, Color.F, Color.L },
33
            { Color.U, Color.L, Color.B }, { Color.U, Color.B, Color.R },
34
            { Color.D, Color.F, Color.R }, { Color.D, Color.L, Color.F },
35
	    { Color.D, Color.B, Color.L }, { Color.D, Color.R, Color.B } };
36

    
37
	// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
38
	// Map the edge positions to facelet colors.
39
	final static int[][] edgeColor =
40
          { { Color.U, Color.R }, { Color.U, Color.F }, { Color.U, Color.L },
41
            { Color.U, Color.B }, { Color.D, Color.R }, { Color.D, Color.F },
42
            { Color.D, Color.L }, { Color.D, Color.B }, { Color.F, Color.R },
43
            { Color.F, Color.L }, { Color.B, Color.L }, { Color.B, Color.R } };
44

    
45
	// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
46
	FaceCube()
47
      {
48
	  String s = "UUUUUUUUURRRRRRRRRFFFFFFFFFDDDDDDDDDLLLLLLLLLBBBBBBBBB";
49

    
50
      for (int i = 0; i < 54; i++)
51
	    f[i] = Color.toInt(s.substring(i, i + 1));
52
	  }
53

    
54
	// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
55
	// Construct a facelet cube from a string
56
	FaceCube(String cubeString)
57
      {
58
	  for (int i = 0; i < cubeString.length(); i++)
59
	    f[i] = Color.toInt(cubeString.substring(i, i + 1));
60
	  }
61

    
62
	// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
63
	// Gives string representation of a facelet cube
64
	String to_String()
65
      {
66
	  String s = "";
67

    
68
	  for (int i = 0; i < 54; i++)
69
	    s += Color.toString(f[i]);
70

    
71
          return s;
72
	  }
73

    
74
	// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
75
	// Gives CubieCube representation of a faceletcube
76
	CubieCube toCubieCube()
77
          {
78
	  byte ori;
79
	  CubieCube ccRet = new CubieCube();
80
		
81
          for (int i = 0; i <  8; i++) ccRet.cp[i] = Corner.URF; // invalidate corners
82
	  for (int i = 0; i < 12; i++) ccRet.ep[i] = Edge.UR;    // and edges
83

    
84
	  int col1, col2;
85

    
86
	  for ( int i=Corner.URF; i<=Corner.DRB; i++)
87
            {
88
	    // get the colors of the cubie at corner i, starting with U/D
89
	    for (ori = 0; ori < 3; ori++)
90
	      if (f[cornerFacelet[i][ori]] == Color.U || f[cornerFacelet[i][ori]] == Color.D)
91
		break;
92

    
93
	    col1 = f[cornerFacelet[i][(ori + 1) % 3]];
94
	    col2 = f[cornerFacelet[i][(ori + 2) % 3]];
95

    
96
	    for ( int j=Corner.URF; j<=Corner.DRB; j++)
97
              {
98
	      if (col1 == cornerColor[j][1] && col2 == cornerColor[j][2])
99
                {
100
		// in cornerposition i we have cornercubie j
101
		ccRet.cp[i] = j;
102
		ccRet.co[i] = (byte) (ori % 3);
103
		break;
104
		}
105
	      }
106
	    }
107

    
108
          for ( int i=Edge.UR; i<=Edge.BR; i++)
109
            {
110
	    for ( int j=Edge.UR; j<=Edge.BR; j++)
111
              {
112
              if (f[edgeFacelet[i][0]] == edgeColor[j][0] && f[edgeFacelet[i][1]] == edgeColor[j][1])
113
                {
114
		ccRet.ep[i] = j;
115
		ccRet.eo[i] = 0;
116
		break;
117
		}
118
              if (f[edgeFacelet[i][0]] == edgeColor[j][1] && f[edgeFacelet[i][1]] == edgeColor[j][0])
119
                {
120
		ccRet.ep[i] = j;
121
		ccRet.eo[i] = 1;
122
		break;
123
                }
124
	      }
125
	    }
126

    
127
	return ccRet;
128
	};
129
}
(6-6/9)