CubeTwister 2.0alpha141 2011-10-13

ch.randelshofer.rubik
Class RevengeCube

java.lang.Object
  extended by ch.randelshofer.rubik.AbstractCube
      extended by ch.randelshofer.rubik.RevengeCube
All Implemented Interfaces:
Cube, java.lang.Cloneable

public class RevengeCube
extends AbstractCube

Represents the state of a 4-times sliced cube (Revenge Cube) by the location and orientation of its parts.

A Revenge Cube has 8 corner parts, 24 edge parts, 24 side parts and one center part. The parts divide each face of the cube into 4 x 4 layers.

Corner parts

The following diagram shows the initial orientations and locations of the corner parts:

                 +---+---+---+---+
                 |4.0|       |2.0|
                 +---+       +---+
                 |               |
                 +       u       +
                 |               |
                 +---+       +---+
                 |6.0|       |0.0|
 +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
 |4.1|       |6.2|6.1|       |0.2|0.1|       |2.2|2.1|       |4.2|
 +---+       +---+---+       +---+---+       +---+---+       +---+
 |               |               |               |               |
 +       l       +       f       +       r       +       b       +
 |               |               |               |               |
 +---+       +---+---+       +---+---+       +---+---+       +---+
 |5.2|       |7.1|7.2|       |1.1|1.2|       |3.1|3.2|       |5.1|
 +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
                 |7.0|       |1.0|
                 +---+       +---+
                 |               |
                 +       d       +
                 |               |
                 +---+       +---+
                 |5.0|       |3.0|
                 +---+---+---+---+
 

Edge parts

The following diagram shows the initial orientations and locations of the edge parts. The first 12 edges are located near the origins of the x-, y- and z-axis. The second 12 edges are located far from the origin of the x-, y- and z-axis.

                         X--->
                   +---+---+---+---+
                   |   |3.1|15 |   |
                 Z +---+---+---+---+ Z
                 | |6.0|       |0.0| |
                 v +---+   u   +---+ v
                   |18 |       |12 |
                   +---+---+---+---+
         Z--->     |   |9.1|21 |   |      <---Z           <---X
   +---+---+---+---+---+---*---+---+---+---+---+---+---+---+---+---+
   |   |6.1|18 |   |   |9.0|21 |   |   |12 |0.1|   |   |15 |3.0|   |
   +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
 ^ |19 |       |22 |22 |       |13 |13 |       |16 |16 |       |19 | ^
 | +---+   l   +---+---+   f   +---+---+   r   +---+---+   b   +---+ |
 Y |7.0|       10.0|10.1       |1.1|1.0|       |4.0|4.1|       |7.1| Y
   +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
   |   |8.1|20 |   |   11.0|23 |   |   |14 |2.1|   |   |17 |5.0|   |
   +---+---+---+---+---+---+---+---+---+---+---+---+---+---*---+---+
         Z--->     |   11.1|23 |   |      <---Z            <---X
                   +---+---+---+---+
                   |20 |       |14 |
                   +---+   d   +---+ ^
                   |8.0|       |2.0| |
                   +---+---+---+---+ Z
                   |   |5.1|17 |   |
                   +---+---+---+---+
                       X--->
 

Side parts

The following diagram shows the initial orientation and location of the face parts:

                 +---+---+---+---+
                 |      .1       |
                 +   +---+---+   +
                 |   | 1 | 7 |   |
                 + .0+---+---+.2 +
                 |   |19 |13 |   |
                 +   +---+---+   +
                 |      .3       |
 +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
 |      .0       |      .2       |      .3       |      .1       |
 +   +---+---+   +   +---+---+   +   +---+---+   +   +---+---+   +
 |   |21 | 3 |   |   | 8 |14 |   |   |12 |18 |   |   | 5 |11 |   |
 + .3+---+---+.1 + .1+---+---+.3 + .2+---+---+.0 + .0+---+---+.2 +
 |   |15 | 9 |   |   | 2 |20 |   |   | 6 | 0 |   |   |23 |17 |   |
 +   +---+---+   +   +---+---+   +   +---+---+   +   +---+---+   +
 |      .2       |      .0       |      .1       |      .3       |
 +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
                 |      .0       |
                 +   +---+---+   +
                 |   |22 | 4 |   |
                 + .3+---+---+.1 +
                 |   |16 |10 |   |
                 +   +---+---+   +
                 |      .2       |
                 +---+---+---+---+
 

For more information about the location and orientation of the parts see AbstractCube.

Version:
3.0.1 2009-01-25 Fixed EDGE_SWIPE_TABLE.
3.0 2009-01-01 Added support for twisting the cube by swiping over its faces.
2.0 2007-12-31 Adapted to changes in AbstractCube.
1.0 14 February 2005 Created.
Author:
Werner Randelshofer

Nested Class Summary
 
Nested classes/interfaces inherited from class ch.randelshofer.rubik.AbstractCube
AbstractCube.TransformType
 
Field Summary
 
Fields inherited from class ch.randelshofer.rubik.AbstractCube
CENTER_PART, CENTER_TO_SIDE_MAP, CORNER_PART, CORNER_SWIPE_TABLE, CORNER_TO_FACE_MAP, cornerLoc, cornerOrient, EDGE_PART, EDGE_TO_ANGLE_MAP, EDGE_TO_AXIS_MAP, EDGE_TO_FACE_MAP, edgeLoc, edgeOrient, layerCount, NUMBER_OF_CORNER_PARTS, SIDE_PART, sideLoc, sideOrient, transformAngle, transformAxis, transformMask, transformType
 
Constructor Summary
RevengeCube()
          Creates a new instance.
 
Method Summary
 int getPartLayerMask(int part, int orientation)
          Returns the current layer mask on which the orientation of the part lies.
 int getPartSwipeAngle(int part, int orientation, int swipeDirection)
          Returns the angle on which the orientation of the part can be swiped into the specified direction.
 int getPartSwipeAxis(int part, int orientation, int swipeDirection)
          Returns the axis on which the orientation of the part can be swiped into the specified direction.
 int getPartSwipeLayerMask(int part, int orientation, int swipeDirection)
          Returns the layer mask on which the orientation of the part can be swiped into the specified direction.
 void setToStickers(int[][] stickers)
          Sets the cube to a state where the faces of the parts map to the provided stickers array.
 int[][] toStickers()
          Converts the cube into a stickers array reflecting the current permutation of the cube.
protected  void transform0(int axis, int layerMask, int angle)
          Transforms the cube and fires a cubeTwisted event.
 
Methods inherited from class ch.randelshofer.rubik.AbstractCube
addCubeListener, clone, equals, fireCubeChanged, fireCubeTwisted, fourCycle, getCornerAt, getCornerCount, getCornerLocation, getCornerLocations, getCornerOrientation, getCornerOrientations, getCubeOrientation, getEdgeAt, getEdgeCount, getEdgeLocation, getEdgeLocations, getEdgeOrientation, getEdgeOrientations, getLayerCount, getPartAngle, getPartAt, getPartAxis, getPartCount, getPartFace, getPartLocation, getPartOrientation, getPartType, getSideAt, getSideCount, getSideLocation, getSideLocations, getSideOrientation, getSideOrientations, getUnsolvedParts, hashCode, isQuiet, isSolved, removeCubeListener, reset, setCorners, setEdges, setQuiet, setSides, setTo, transform, transform, twoCycle
 
Methods inherited from class java.lang.Object
finalize, getClass, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

RevengeCube

public RevengeCube()
Creates a new instance.

Method Detail

transform0

protected void transform0(int axis,
                          int layerMask,
                          int angle)
Transforms the cube and fires a cubeTwisted event.

Specified by:
transform0 in class AbstractCube
Parameters:
axis - 0=x, 1=y, 2=z axis.
layerMask - A bitmask specifying the layers to be transformed. The size of the layer mask depends on the value returned by getLayerCount(axis). For a 3x3x3 cube, the layer mask has the following meaning: 15=rotate the whole cube;
1=twist slice near the axis (left, down, back)
2=twist slice in the near middle of the axis
4=twist slice in the far middle of the axis
8=twist slice far away from the axis (right, up, front)
angle - positive values=clockwise rotation
negative values=counterclockwise rotation
1=90 degrees
2=180 degrees
See Also:
AbstractCube.getLayerCount()

getPartLayerMask

public int getPartLayerMask(int part,
                            int orientation)
Returns the current layer mask on which the orientation of the part lies. Returns 0 if no mask can be determined (the center part).

Specified by:
getPartLayerMask in interface Cube
Specified by:
getPartLayerMask in class AbstractCube
Returns:
2^layer number

toStickers

public int[][] toStickers()
Description copied from interface: Cube
Converts the cube into a stickers array reflecting the current permutation of the cube.

Returns:
Array of stickers: int[6][getLayerCount()*getLayerCount()]. Same structure as in method setStickers().
See Also:
Cube.setToStickers(int[][])

setToStickers

public void setToStickers(int[][] stickers)
Description copied from interface: Cube
Sets the cube to a state where the faces of the parts map to the provided stickers array.

Parameters:
stickers - Sticker array to be reused. The method creates a new array if this parameter is null.

getPartSwipeAxis

public int getPartSwipeAxis(int part,
                            int orientation,
                            int swipeDirection)
Description copied from interface: Cube
Returns the axis on which the orientation of the part can be swiped into the specified direction.

Parameters:
part - The part index.
orientation - The orientation of the part where swiping is performed.
swipeDirection - The direction of the swipe. 0=up,1=right,2=down,4=left.
Returns:
0 for the x-axis, 1 for the y-axis, 2 for the z-axis. -1 if the part lies on none or multiple axis (the center part).

getPartSwipeLayerMask

public int getPartSwipeLayerMask(int part,
                                 int orientation,
                                 int swipeDirection)
Description copied from interface: Cube
Returns the layer mask on which the orientation of the part can be swiped into the specified direction. Returns 0 if no mask can be determined (the center part).

Parameters:
part - The part index.
orientation - The orientation of the part where swiping is performed.
swipeDirection - The direction of the swipe. 0=up,1=right,2=down,4=left.
Returns:
2^layer number

getPartSwipeAngle

public int getPartSwipeAngle(int part,
                             int orientation,
                             int swipeDirection)
Description copied from interface: Cube
Returns the angle on which the orientation of the part can be swiped into the specified direction.

Parameters:
part - The part index.
orientation - The orientation of the part where swiping is performed.
swipeDirection - The direction of the swipe. 0=up,1=right,2=down,4=left.
Returns:
Returns 1 or -1. Returns 0 if the direction can not be determined (the center part).

(c) Werner Randelshofer.
All rights reserved.