commit da178c88f89d49c9eff0934d21d4279e8644daa3
Author: Leszek Koltunski <leszek@koltunski.pl>
Date:   Sun Sep 19 00:44:43 2021 +0200

    Make computing the offset in the Movement class more correct. From now on, in the center of the face the offset if always 0 regardless of the axis.
    Before it would always assume that we can add DIST2D to the offset which is originated at the center of the face and this way get an offset which spans from 0 to height of the face. This is not always true - conterexample: half of the triangluar faces of an octahedron which are 'upside down'

diff --git a/src/main/java/org/distorted/objects/Movement.java b/src/main/java/org/distorted/objects/Movement.java
index b3ade897..9b5232b5 100644
--- a/src/main/java/org/distorted/objects/Movement.java
+++ b/src/main/java/org/distorted/objects/Movement.java
@@ -152,10 +152,11 @@ public abstract class Movement
     }
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
+// in the center of the face offset is always 0 regardless of the axis
 
   private float computeOffset(float[] point, float[] axis)
     {
-    return point[0]*axis[0] + point[1]*axis[1] + mDistanceCenterFace2D;
+    return point[0]*axis[0] + point[1]*axis[1];
     }
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
diff --git a/src/main/java/org/distorted/objects/MovementCube.java b/src/main/java/org/distorted/objects/MovementCube.java
index f9beaf96..89e0c689 100644
--- a/src/main/java/org/distorted/objects/MovementCube.java
+++ b/src/main/java/org/distorted/objects/MovementCube.java
@@ -32,7 +32,7 @@ class MovementCube extends Movement6
 
   int computeRowFromOffset(int face, int axisIndex, int numLayers, float offset)
     {
-    return (int)(numLayers*offset);
+    return (int)(numLayers*(offset+DIST2D));
     }
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
diff --git a/src/main/java/org/distorted/objects/MovementDiamond.java b/src/main/java/org/distorted/objects/MovementDiamond.java
index 107b0f1a..65465cf2 100644
--- a/src/main/java/org/distorted/objects/MovementDiamond.java
+++ b/src/main/java/org/distorted/objects/MovementDiamond.java
@@ -36,8 +36,8 @@ class MovementDiamond extends Movement8
 
   int computeRowFromOffset(int face, int axisIndex, int numLayers, float offset)
     {
-    float off = ( face==1 || face==3 || face==4 || face==6 ) ? offset/SQ3 + 1.0f/6 : offset/SQ3;
-    return (int)(2*numLayers*off);
+    float off = ( face==1 || face==3 || face==4 || face==6 ) ? (offset+2*DIST2D) : (offset+DIST2D);
+    return (int)(numLayers*off/(3*DIST2D));
     }
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
diff --git a/src/main/java/org/distorted/objects/MovementDino.java b/src/main/java/org/distorted/objects/MovementDino.java
index 603f3c90..eb519484 100644
--- a/src/main/java/org/distorted/objects/MovementDino.java
+++ b/src/main/java/org/distorted/objects/MovementDino.java
@@ -33,7 +33,7 @@ class MovementDino extends Movement6
 
   int computeRowFromOffset(int face, int axisIndex, int numLayers, float offset)
     {
-    return offset<DIST2D ? 0:2;
+    return offset<0 ? 0:2;
     }
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
diff --git a/src/main/java/org/distorted/objects/MovementHelicopter.java b/src/main/java/org/distorted/objects/MovementHelicopter.java
index a1d3fadd..7dee3524 100644
--- a/src/main/java/org/distorted/objects/MovementHelicopter.java
+++ b/src/main/java/org/distorted/objects/MovementHelicopter.java
@@ -32,7 +32,7 @@ class MovementHelicopter extends Movement6
 
   int computeRowFromOffset(int face, int axisIndex, int numLayers, float offset)
     {
-    return offset<DIST2D ? 0:2;
+    return offset<0 ? 0:2;
     }
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
diff --git a/src/main/java/org/distorted/objects/MovementIvy.java b/src/main/java/org/distorted/objects/MovementIvy.java
index 05659bb6..5468a7ec 100644
--- a/src/main/java/org/distorted/objects/MovementIvy.java
+++ b/src/main/java/org/distorted/objects/MovementIvy.java
@@ -32,7 +32,7 @@ class MovementIvy extends Movement6
 
   int computeRowFromOffset(int face, int axisIndex, int numLayers, float offset)
     {
-    return offset<DIST2D ? 0:1;
+    return offset<0 ? 0:1;
     }
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
diff --git a/src/main/java/org/distorted/objects/MovementJing.java b/src/main/java/org/distorted/objects/MovementJing.java
index b5ae5a03..66c09480 100644
--- a/src/main/java/org/distorted/objects/MovementJing.java
+++ b/src/main/java/org/distorted/objects/MovementJing.java
@@ -34,7 +34,7 @@ class MovementJing extends Movement4
 
   int computeRowFromOffset(int face, int axisIndex, int numLayers, float offset)
     {
-    return offset < (SQ3/4)*F ? 0:1;
+    return offset+DIST2D < (SQ3/4)*F ? 0:1;
     }
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
diff --git a/src/main/java/org/distorted/objects/MovementMinx.java b/src/main/java/org/distorted/objects/MovementMinx.java
index a85bd5da..a8102264 100644
--- a/src/main/java/org/distorted/objects/MovementMinx.java
+++ b/src/main/java/org/distorted/objects/MovementMinx.java
@@ -34,16 +34,16 @@ class MovementMinx extends Movement12
     {
     if( numLayers==3 )
       {
-      return offset<DIST2D ? 0:2;
+      return offset<0 ? 0:2;
       }
     if( numLayers==5 )
       {
       float quot = offset / DIST2D;
 
-      if( quot>0.00f && quot<=0.34f ) return 0;
-      if( quot>0.34f && quot<=1.00f ) return 1;
-      if( quot>1.00f && quot<=1.66f ) return 3;
-      if( quot>1.66f && quot<=2.00f ) return 4;
+      if( quot>-1.00f && quot<=-0.66f ) return 0;
+      if( quot>-0.66f && quot<= 0.00f ) return 1;
+      if( quot> 0.00f && quot<= 0.66f ) return 3;
+      if( quot> 0.66f && quot<= 1.00f ) return 4;
       }
 
     return 0;
diff --git a/src/main/java/org/distorted/objects/MovementPyraminx.java b/src/main/java/org/distorted/objects/MovementPyraminx.java
index 306a8ee2..9b795c73 100644
--- a/src/main/java/org/distorted/objects/MovementPyraminx.java
+++ b/src/main/java/org/distorted/objects/MovementPyraminx.java
@@ -32,7 +32,7 @@ class MovementPyraminx extends Movement4
 
   int computeRowFromOffset(int face, int axisIndex, int numLayers, float offset)
     {
-    return (int)(numLayers*offset/(SQ6/3));
+    return (int)(numLayers*(offset+DIST2D)/(3*DIST2D));
     }
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
diff --git a/src/main/java/org/distorted/objects/MovementRedi.java b/src/main/java/org/distorted/objects/MovementRedi.java
index e95e7d03..b926e459 100644
--- a/src/main/java/org/distorted/objects/MovementRedi.java
+++ b/src/main/java/org/distorted/objects/MovementRedi.java
@@ -32,7 +32,7 @@ class MovementRedi extends Movement6
 
   int computeRowFromOffset(int face, int axisIndex, int numLayers, float offset)
     {
-    return offset<DIST2D ? 0:2;
+    return offset<0 ? 0:2;
     }
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
diff --git a/src/main/java/org/distorted/objects/MovementRex.java b/src/main/java/org/distorted/objects/MovementRex.java
index 69a2b073..3a035d3c 100644
--- a/src/main/java/org/distorted/objects/MovementRex.java
+++ b/src/main/java/org/distorted/objects/MovementRex.java
@@ -32,7 +32,7 @@ class MovementRex extends Movement6
 
   int computeRowFromOffset(int face, int axisIndex, int numLayers, float offset)
     {
-    return offset<DIST2D ? 0:2;
+    return offset<0 ? 0:2;
     }
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
diff --git a/src/main/java/org/distorted/objects/MovementSkewb.java b/src/main/java/org/distorted/objects/MovementSkewb.java
index 4cc72ac7..3884e0e5 100644
--- a/src/main/java/org/distorted/objects/MovementSkewb.java
+++ b/src/main/java/org/distorted/objects/MovementSkewb.java
@@ -32,7 +32,7 @@ class MovementSkewb extends Movement6
 
   int computeRowFromOffset(int face, int axisIndex, int numLayers, float offset)
     {
-    return offset<DIST2D ? 0:numLayers-1;
+    return offset<0 ? 0:numLayers-1;
     }
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
diff --git a/src/main/java/org/distorted/objects/MovementSquare.java b/src/main/java/org/distorted/objects/MovementSquare.java
index 97817cf8..8bbd2a29 100644
--- a/src/main/java/org/distorted/objects/MovementSquare.java
+++ b/src/main/java/org/distorted/objects/MovementSquare.java
@@ -32,7 +32,7 @@ class MovementSquare extends Movement6
 
   int computeRowFromOffset(int face, int axisIndex, int numLayers, float offset)
     {
-    return offset<DIST2D? 0 : 2-axisIndex;
+    return offset<0 ? 0 : 2-axisIndex;
     }
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
diff --git a/src/main/java/org/distorted/objects/MovementUltimate.java b/src/main/java/org/distorted/objects/MovementUltimate.java
index 756f2dd9..f383e113 100644
--- a/src/main/java/org/distorted/objects/MovementUltimate.java
+++ b/src/main/java/org/distorted/objects/MovementUltimate.java
@@ -32,7 +32,7 @@ class MovementUltimate extends Movement12
 
   int computeRowFromOffset(int face, int axisIndex, int numLayers, float offset)
     {
-    return offset<DIST2D ? 0:1;
+    return offset<0 ? 0:1;
     }
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
