CubeTwister 2.0alpha142 2012-02-11

ch.randelshofer.rubik
Class PocketCube

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

public class PocketCube
extends AbstractCube

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

A Pocket Cube has 8 corner parts. The parts divide each face of the cube into 2 x 2 layers.

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

         +---+---+
         |4.0|2.0|
         +--- ---+ 
  ulb ufl|6.0|0.0|urf ubr  
 +---+---+---+---+---+---+---+---+
 |4.1|6.2|6.1|0.2|0.1|2.2|2.1|4.2|
 +--- ---+--- ---+--- ---+--- ---+
 |5.2|7.1|7.2|1.1|1.2|3.1|3.2|5.1|
 +---+---+---+---+---+---+---+---+
  dbl dlf|7.0|1.0|dfr drb
         +--- ---+
         |5.0|3.0|
         +---+---+
 
For more information about the location and orientation of the parts see AbstractCube.

Version:
3.0 2009-01-01 Added support for twisting the cube by swiping over its faces.
2.0 2007-12-29 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
PocketCube()
          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

PocketCube

public PocketCube()
Creates a new instance.

Method Detail

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

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: 3=rotate the whole cube;
1=twist slice near the axis (left, down, back)
2=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()

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.