commit eaf57f1ca23159321381fa1bd8372829094603e9
Author: Leszek Koltunski <leszek@koltunski.pl>
Date:   Wed Jul 17 23:22:30 2019 +0100

    Modify the 'convexity' param in Dynamics.
    
    This finally satisfies the requirements of the 'Spin' effect in MagicCube: achieving constant speed ( by setting a 1D Dynamic's convexity to 0)

diff --git a/src/main/java/org/distorted/library/type/Dynamic1D.java b/src/main/java/org/distorted/library/type/Dynamic1D.java
index 6f929ac..a658f4e 100644
--- a/src/main/java/org/distorted/library/type/Dynamic1D.java
+++ b/src/main/java/org/distorted/library/type/Dynamic1D.java
@@ -57,11 +57,11 @@ public class Dynamic1D extends Dynamic implements Data1D
       
       if( q>1 )
         {
-        tmp1.tangent[0] = mConvexity*(nx+px/q);
+        tmp1.tangent[0] = nx+px/q;
         }
       else
         {
-        tmp1.tangent[0] = mConvexity*(px+nx*q);
+        tmp1.tangent[0] = px+nx*q;
         }
       }
     else
@@ -118,9 +118,9 @@ public class Dynamic1D extends Dynamic implements Data1D
     
         tmp1.cached[0] = curr.x;
         
-        tmp1.a[0] =  2*curr.x +   tmp1.tangent[0] - 2*next.x + tmp2.tangent[0];
-        tmp1.b[0] = -3*curr.x - 2*tmp1.tangent[0] + 3*next.x - tmp2.tangent[0];
-        tmp1.c[0] = tmp1.tangent[0];
+        tmp1.a[0] = mConvexity*( 2*curr.x +   tmp1.tangent[0] - 2*next.x + tmp2.tangent[0]);
+        tmp1.b[0] = mConvexity*(-3*curr.x - 2*tmp1.tangent[0] + 3*next.x - tmp2.tangent[0]);
+        tmp1.c[0] = mConvexity*(tmp1.tangent[0]) + (1.0f-mConvexity)*(next.x-curr.x);
         tmp1.d[0] = curr.x;
         }
       }
diff --git a/src/main/java/org/distorted/library/type/Dynamic2D.java b/src/main/java/org/distorted/library/type/Dynamic2D.java
index efc7ab2..7c1d76b 100644
--- a/src/main/java/org/distorted/library/type/Dynamic2D.java
+++ b/src/main/java/org/distorted/library/type/Dynamic2D.java
@@ -59,13 +59,13 @@ public class Dynamic2D extends Dynamic implements Data2D
       
       if( q>1 )
         {
-        tmp1.tangent[0] = mConvexity*(nx+px/q);
-        tmp1.tangent[1] = mConvexity*(ny+py/q);
+        tmp1.tangent[0] = nx+px/q;
+        tmp1.tangent[1] = ny+py/q;
         }
       else
         {
-        tmp1.tangent[0] = mConvexity*(px+nx*q);
-        tmp1.tangent[1] = mConvexity*(py+ny*q);
+        tmp1.tangent[0] = px+nx*q;
+        tmp1.tangent[1] = py+ny*q;
         }
       }
     else
@@ -129,14 +129,14 @@ public class Dynamic2D extends Dynamic implements Data2D
         tmp1.cached[0] = curr.x;
         tmp1.cached[1] = curr.y;
 
-        tmp1.a[0] =  2*curr.x +   tmp1.tangent[0] - 2*next.x + tmp2.tangent[0];
-        tmp1.b[0] = -3*curr.x - 2*tmp1.tangent[0] + 3*next.x - tmp2.tangent[0];
-        tmp1.c[0] = tmp1.tangent[0];
+        tmp1.a[0] = mConvexity*( 2*curr.x +   tmp1.tangent[0] - 2*next.x + tmp2.tangent[0]);
+        tmp1.b[0] = mConvexity*(-3*curr.x - 2*tmp1.tangent[0] + 3*next.x - tmp2.tangent[0]);
+        tmp1.c[0] = mConvexity*(tmp1.tangent[0]) + (1.0f-mConvexity)*(next.x-curr.x);
         tmp1.d[0] = curr.x;
 
-        tmp1.a[1] =  2*curr.y +   tmp1.tangent[1] - 2*next.y + tmp2.tangent[1];
-        tmp1.b[1] = -3*curr.y - 2*tmp1.tangent[1] + 3*next.y - tmp2.tangent[1];
-        tmp1.c[1] = tmp1.tangent[1];
+        tmp1.a[1] = mConvexity*( 2*curr.y +   tmp1.tangent[1] - 2*next.y + tmp2.tangent[1]);
+        tmp1.b[1] = mConvexity*(-3*curr.y - 2*tmp1.tangent[1] + 3*next.y - tmp2.tangent[1]);
+        tmp1.c[1] = mConvexity*(tmp1.tangent[1]) + (1.0f-mConvexity)*(next.y-curr.y);
         tmp1.d[1] = curr.y;
         }
       }
diff --git a/src/main/java/org/distorted/library/type/Dynamic3D.java b/src/main/java/org/distorted/library/type/Dynamic3D.java
index e98571b..79f832a 100644
--- a/src/main/java/org/distorted/library/type/Dynamic3D.java
+++ b/src/main/java/org/distorted/library/type/Dynamic3D.java
@@ -61,15 +61,15 @@ public class Dynamic3D extends Dynamic implements Data3D
       
       if( q>1 )
         {
-        tmp1.tangent[0] = mConvexity*(nx+px/q);
-        tmp1.tangent[1] = mConvexity*(ny+py/q);
-        tmp1.tangent[2] = mConvexity*(nz+pz/q);
+        tmp1.tangent[0] = nx+px/q;
+        tmp1.tangent[1] = ny+py/q;
+        tmp1.tangent[2] = nz+pz/q;
         }
       else
         {
-        tmp1.tangent[0] = mConvexity*(px+nx*q);
-        tmp1.tangent[1] = mConvexity*(py+ny*q);
-        tmp1.tangent[2] = mConvexity*(pz+nz*q);
+        tmp1.tangent[0] = px+nx*q;
+        tmp1.tangent[1] = py+ny*q;
+        tmp1.tangent[2] = pz+nz*q;
         }
       }
     else
@@ -140,19 +140,19 @@ public class Dynamic3D extends Dynamic implements Data3D
         tmp1.cached[1] = curr.y;
         tmp1.cached[2] = curr.z;
         
-        tmp1.a[0] =  2*curr.x +   tmp1.tangent[0] - 2*next.x + tmp2.tangent[0];
-        tmp1.b[0] = -3*curr.x - 2*tmp1.tangent[0] + 3*next.x - tmp2.tangent[0];
-        tmp1.c[0] = tmp1.tangent[0];
+        tmp1.a[0] = mConvexity*( 2*curr.x +   tmp1.tangent[0] - 2*next.x + tmp2.tangent[0]);
+        tmp1.b[0] = mConvexity*(-3*curr.x - 2*tmp1.tangent[0] + 3*next.x - tmp2.tangent[0]);
+        tmp1.c[0] = mConvexity*(tmp1.tangent[0]) + (1.0f-mConvexity)*(next.x-curr.x);
         tmp1.d[0] = curr.x;
       
-        tmp1.a[1] =  2*curr.y +   tmp1.tangent[1] - 2*next.y + tmp2.tangent[1];
-        tmp1.b[1] = -3*curr.y - 2*tmp1.tangent[1] + 3*next.y - tmp2.tangent[1];
-        tmp1.c[1] = tmp1.tangent[1];
+        tmp1.a[1] = mConvexity*( 2*curr.y +   tmp1.tangent[1] - 2*next.y + tmp2.tangent[1]);
+        tmp1.b[1] = mConvexity*(-3*curr.y - 2*tmp1.tangent[1] + 3*next.y - tmp2.tangent[1]);
+        tmp1.c[1] = mConvexity*(tmp1.tangent[1]) + (1.0f-mConvexity)*(next.y-curr.y);
         tmp1.d[1] = curr.y;
       
-        tmp1.a[2] =  2*curr.z +   tmp1.tangent[2] - 2*next.z + tmp2.tangent[2];
-        tmp1.b[2] = -3*curr.z - 2*tmp1.tangent[2] + 3*next.z - tmp2.tangent[2];
-        tmp1.c[2] = tmp1.tangent[2];
+        tmp1.a[2] = mConvexity*( 2*curr.z +   tmp1.tangent[2] - 2*next.z + tmp2.tangent[2]);
+        tmp1.b[2] = mConvexity*(-3*curr.z - 2*tmp1.tangent[2] + 3*next.z - tmp2.tangent[2]);
+        tmp1.c[2] = mConvexity*(tmp1.tangent[2]) + (1.0f-mConvexity)*(next.z-curr.z);
         tmp1.d[2] = curr.z;
         }
       }
diff --git a/src/main/java/org/distorted/library/type/Dynamic4D.java b/src/main/java/org/distorted/library/type/Dynamic4D.java
index fbb64f5..2a8a348 100644
--- a/src/main/java/org/distorted/library/type/Dynamic4D.java
+++ b/src/main/java/org/distorted/library/type/Dynamic4D.java
@@ -63,17 +63,17 @@ public class Dynamic4D extends Dynamic implements Data4D
       
       if( q>1 )
         {
-        tmp1.tangent[0] = mConvexity*(nx+px/q);
-        tmp1.tangent[1] = mConvexity*(ny+py/q);
-        tmp1.tangent[2] = mConvexity*(nz+pz/q);
-        tmp1.tangent[3] = mConvexity*(nw+pw/q);
+        tmp1.tangent[0] = nx+px/q;
+        tmp1.tangent[1] = ny+py/q;
+        tmp1.tangent[2] = nz+pz/q;
+        tmp1.tangent[3] = nw+pw/q;
         }
       else
         {
-        tmp1.tangent[0] = mConvexity*(px+nx*q);
-        tmp1.tangent[1] = mConvexity*(py+ny*q);
-        tmp1.tangent[2] = mConvexity*(pz+nz*q);
-        tmp1.tangent[3] = mConvexity*(pw+nw*q);
+        tmp1.tangent[0] = px+nx*q;
+        tmp1.tangent[1] = py+ny*q;
+        tmp1.tangent[2] = pz+nz*q;
+        tmp1.tangent[3] = pw+nw*q;
         }
       }
     else
@@ -151,24 +151,24 @@ public class Dynamic4D extends Dynamic implements Data4D
         tmp1.cached[2] = curr.z;
         tmp1.cached[3] = curr.w;
         
-        tmp1.a[0] =  2*curr.x +   tmp1.tangent[0] - 2*next.x + tmp2.tangent[0];
-        tmp1.b[0] = -3*curr.x - 2*tmp1.tangent[0] + 3*next.x - tmp2.tangent[0];
-        tmp1.c[0] = tmp1.tangent[0];
+        tmp1.a[0] = mConvexity*( 2*curr.x +   tmp1.tangent[0] - 2*next.x + tmp2.tangent[0]);
+        tmp1.b[0] = mConvexity*(-3*curr.x - 2*tmp1.tangent[0] + 3*next.x - tmp2.tangent[0]);
+        tmp1.c[0] = mConvexity*(tmp1.tangent[0]) + (1.0f-mConvexity)*(next.x-curr.x);
         tmp1.d[0] = curr.x;
       
-        tmp1.a[1] =  2*curr.y +   tmp1.tangent[1] - 2*next.y + tmp2.tangent[1];
-        tmp1.b[1] = -3*curr.y - 2*tmp1.tangent[1] + 3*next.y - tmp2.tangent[1];
-        tmp1.c[1] = tmp1.tangent[1];
+        tmp1.a[1] = mConvexity*( 2*curr.y +   tmp1.tangent[1] - 2*next.y + tmp2.tangent[1]);
+        tmp1.b[1] = mConvexity*(-3*curr.y - 2*tmp1.tangent[1] + 3*next.y - tmp2.tangent[1]);
+        tmp1.c[1] = mConvexity*(tmp1.tangent[1]) + (1.0f-mConvexity)*(next.y-curr.y);
         tmp1.d[1] = curr.y;
       
-        tmp1.a[2] =  2*curr.z +   tmp1.tangent[2] - 2*next.z + tmp2.tangent[2];
-        tmp1.b[2] = -3*curr.z - 2*tmp1.tangent[2] + 3*next.z - tmp2.tangent[2];
-        tmp1.c[2] = tmp1.tangent[2];
+        tmp1.a[2] = mConvexity*( 2*curr.z +   tmp1.tangent[2] - 2*next.z + tmp2.tangent[2]);
+        tmp1.b[2] = mConvexity*(-3*curr.z - 2*tmp1.tangent[2] + 3*next.z - tmp2.tangent[2]);
+        tmp1.c[2] = mConvexity*(tmp1.tangent[2]) + (1.0f-mConvexity)*(next.z-curr.z);
         tmp1.d[2] = curr.z;
         
-        tmp1.a[3] =  2*curr.w +   tmp1.tangent[3] - 2*next.w + tmp2.tangent[3];
-        tmp1.b[3] = -3*curr.w - 2*tmp1.tangent[3] + 3*next.w - tmp2.tangent[3];
-        tmp1.c[3] = tmp1.tangent[3];
+        tmp1.a[3] = mConvexity*( 2*curr.w +   tmp1.tangent[3] - 2*next.w + tmp2.tangent[3]);
+        tmp1.b[3] = mConvexity*(-3*curr.w - 2*tmp1.tangent[3] + 3*next.w - tmp2.tangent[3]);
+        tmp1.c[3] = mConvexity*(tmp1.tangent[3]) + (1.0f-mConvexity)*(next.w-curr.w);
         tmp1.d[3] = curr.w;
         }
       }
diff --git a/src/main/java/org/distorted/library/type/Dynamic5D.java b/src/main/java/org/distorted/library/type/Dynamic5D.java
index 4b799b8..011ba01 100644
--- a/src/main/java/org/distorted/library/type/Dynamic5D.java
+++ b/src/main/java/org/distorted/library/type/Dynamic5D.java
@@ -65,19 +65,19 @@ public class Dynamic5D extends Dynamic implements Data5D
       
       if( q>1 )
         {
-        tmp1.tangent[0] = mConvexity*(nx+px/q);
-        tmp1.tangent[1] = mConvexity*(ny+py/q);
-        tmp1.tangent[2] = mConvexity*(nz+pz/q);
-        tmp1.tangent[3] = mConvexity*(nw+pw/q);
-        tmp1.tangent[4] = mConvexity*(nv+pv/q);
+        tmp1.tangent[0] = nx+px/q;
+        tmp1.tangent[1] = ny+py/q;
+        tmp1.tangent[2] = nz+pz/q;
+        tmp1.tangent[3] = nw+pw/q;
+        tmp1.tangent[4] = nv+pv/q;
         }
       else
         {
-        tmp1.tangent[0] = mConvexity*(px+nx*q);
-        tmp1.tangent[1] = mConvexity*(py+ny*q);
-        tmp1.tangent[2] = mConvexity*(pz+nz*q);
-        tmp1.tangent[3] = mConvexity*(pw+nw*q);
-        tmp1.tangent[4] = mConvexity*(pv+nv*q);
+        tmp1.tangent[0] = px+nx*q;
+        tmp1.tangent[1] = py+ny*q;
+        tmp1.tangent[2] = pz+nz*q;
+        tmp1.tangent[3] = pw+nw*q;
+        tmp1.tangent[4] = pv+nv*q;
         }
       }
     else
@@ -162,29 +162,29 @@ public class Dynamic5D extends Dynamic implements Data5D
         tmp1.cached[3] = curr.w;
         tmp1.cached[4] = curr.v;
         
-        tmp1.a[0] =  2*curr.x +   tmp1.tangent[0] - 2*next.x + tmp2.tangent[0];
-        tmp1.b[0] = -3*curr.x - 2*tmp1.tangent[0] + 3*next.x - tmp2.tangent[0];
-        tmp1.c[0] = tmp1.tangent[0];
+        tmp1.a[0] = mConvexity*( 2*curr.x +   tmp1.tangent[0] - 2*next.x + tmp2.tangent[0]);
+        tmp1.b[0] = mConvexity*(-3*curr.x - 2*tmp1.tangent[0] + 3*next.x - tmp2.tangent[0]);
+        tmp1.c[0] = mConvexity*(tmp1.tangent[0]) + (1.0f-mConvexity)*(next.x-curr.x);
         tmp1.d[0] = curr.x;
       
-        tmp1.a[1] =  2*curr.y +   tmp1.tangent[1] - 2*next.y + tmp2.tangent[1];
-        tmp1.b[1] = -3*curr.y - 2*tmp1.tangent[1] + 3*next.y - tmp2.tangent[1];
-        tmp1.c[1] = tmp1.tangent[1];
+        tmp1.a[1] = mConvexity*( 2*curr.y +   tmp1.tangent[1] - 2*next.y + tmp2.tangent[1]);
+        tmp1.b[1] = mConvexity*(-3*curr.y - 2*tmp1.tangent[1] + 3*next.y - tmp2.tangent[1]);
+        tmp1.c[1] = mConvexity*(tmp1.tangent[1]) + (1.0f-mConvexity)*(next.y-curr.y);
         tmp1.d[1] = curr.y;
       
-        tmp1.a[2] =  2*curr.z +   tmp1.tangent[2] - 2*next.z + tmp2.tangent[2];
-        tmp1.b[2] = -3*curr.z - 2*tmp1.tangent[2] + 3*next.z - tmp2.tangent[2];
-        tmp1.c[2] = tmp1.tangent[2];
+        tmp1.a[2] = mConvexity*( 2*curr.z +   tmp1.tangent[2] - 2*next.z + tmp2.tangent[2]);
+        tmp1.b[2] = mConvexity*(-3*curr.z - 2*tmp1.tangent[2] + 3*next.z - tmp2.tangent[2]);
+        tmp1.c[2] = mConvexity*(tmp1.tangent[2]) + (1.0f-mConvexity)*(next.z-curr.z);
         tmp1.d[2] = curr.z;
         
-        tmp1.a[3] =  2*curr.w +   tmp1.tangent[3] - 2*next.w + tmp2.tangent[3];
-        tmp1.b[3] = -3*curr.w - 2*tmp1.tangent[3] + 3*next.w - tmp2.tangent[3];
-        tmp1.c[3] = tmp1.tangent[3];
+        tmp1.a[3] = mConvexity*( 2*curr.w +   tmp1.tangent[3] - 2*next.w + tmp2.tangent[3]);
+        tmp1.b[3] = mConvexity*(-3*curr.w - 2*tmp1.tangent[3] + 3*next.w - tmp2.tangent[3]);
+        tmp1.c[3] = mConvexity*(tmp1.tangent[3]) + (1.0f-mConvexity)*(next.w-curr.w);
         tmp1.d[3] = curr.w;
         
-        tmp1.a[4] =  2*curr.v +   tmp1.tangent[4] - 2*next.v + tmp2.tangent[4];
-        tmp1.b[4] = -3*curr.v - 2*tmp1.tangent[4] + 3*next.v - tmp2.tangent[4];
-        tmp1.c[4] = tmp1.tangent[4];
+        tmp1.a[4] = mConvexity*( 2*curr.v +   tmp1.tangent[4] - 2*next.v + tmp2.tangent[4]);
+        tmp1.b[4] = mConvexity*(-3*curr.v - 2*tmp1.tangent[4] + 3*next.v - tmp2.tangent[4]);
+        tmp1.c[4] = mConvexity*(tmp1.tangent[4]) + (1.0f-mConvexity)*(next.v-curr.v);
         tmp1.d[4] = curr.v;
         }
       }
