commit 886d1ebbd4a568d5a3096474d5a515a6e9cf76cd
Author: Leszek Koltunski <leszek@koltunski.pl>
Date:   Tue Oct 20 23:50:18 2020 +0100

    Progress with the Ivy.

diff --git a/src/main/java/org/distorted/objects/FactoryCubit.java b/src/main/java/org/distorted/objects/FactoryCubit.java
index 3f1fc04c..3ddad70f 100644
--- a/src/main/java/org/distorted/objects/FactoryCubit.java
+++ b/src/main/java/org/distorted/objects/FactoryCubit.java
@@ -36,6 +36,8 @@ import org.distorted.library.type.Static4D;
 class FactoryCubit
   {
   static final float IVY_D = 0.02f;
+  static final float IVY_C = 0.60f;
+  static final float IVY_M = 0.35f;
 
   private static final float SQ2 = (float)Math.sqrt(2);
   private static final float SQ3 = (float)Math.sqrt(3);
@@ -505,17 +507,15 @@ class FactoryCubit
 
     final float angle = (float)Math.PI/(2*IVY_N);
     final float CORR  = 1.0f - 2*IVY_D;
-    final float DIST  = 0.4f;
-    final float DIST2 = -0.5f*CORR + IVY_D;
-    final float CORR2 = 0.5f;
-    float[] vertices = new float[2*(IVY_N+1)+6];
-
-    vertices[0] = (0.5f -DIST) * CORR2;
-    vertices[1] = (DIST2-DIST) * CORR2;
-    vertices[2] = (0.5f -DIST) * CORR2;
-    vertices[3] = (0.5f -DIST) * CORR2;
-    vertices[4] = (DIST2-DIST) * CORR2;
-    vertices[5] = (0.5f -DIST) * CORR2;
+    final float DIST  = -0.5f*CORR + IVY_D;
+    float[] vertices  = new float[2*(IVY_N+1)+6];
+
+    vertices[0] = (0.5f-IVY_M) * IVY_C;
+    vertices[1] = (DIST-IVY_M) * IVY_C;
+    vertices[2] = (0.5f-IVY_M) * IVY_C;
+    vertices[3] = (0.5f-IVY_M) * IVY_C;
+    vertices[4] = (DIST-IVY_M) * IVY_C;
+    vertices[5] = (0.5f-IVY_M) * IVY_C;
 
     for(int i=0; i<=IVY_N; i++)
       {
@@ -523,11 +523,11 @@ class FactoryCubit
       float sin = (float)Math.sin(ang);
       float cos = (float)Math.cos(ang);
 
-      vertices[2*i+6] = (CORR*(cos-0.5f)-DIST)*CORR2;
-      vertices[2*i+7] = (CORR*(sin-0.5f)-DIST)*CORR2;
+      vertices[2*i+6] = (CORR*(cos-0.5f)-IVY_M)*IVY_C;
+      vertices[2*i+7] = (CORR*(sin-0.5f)-IVY_M)*IVY_C;
       }
 
-    float[] bands0 = computeBands(+0.02f,12,0.2f,0.5f,5);
+    float[] bands0 = computeBands(+0.01f,12,0.2f,0.5f,5);
     float[] bands1 = computeBands(-0.10f,20,0.2f,0.0f,2);
 
     meshes[0] = new MeshPolygon(vertices,bands0,0,0);
@@ -567,7 +567,7 @@ class FactoryCubit
       vertices[2*i+1+2*IVY_N] = CORR*(sin-0.5f);
       }
 
-    float[] bands0 = computeBands(+0.05f,35,0.5f,0.5f,5);
+    float[] bands0 = computeBands(+0.03f,35,0.5f,0.5f,5);
     float[] bands1 = computeBands(-0.10f,45,0.5f,0.0f,2);
 
     meshes[0] = new MeshPolygon(vertices,bands0,0,0);
@@ -983,18 +983,16 @@ class FactoryCubit
 
   VertexEffect[] createVertexEffectsIvyCorner()
     {
-    float DIST=0.1f;
-
     Static3D axisX  = new Static3D(1,0,0);
     Static3D axisY  = new Static3D(0,1,0);
     Static1D angle1 = new Static1D(+90);
     Static1D angle2 = new Static1D(-90);
     Static3D center = new Static3D(0,0,0);
-    Static3D move1  = new Static3D(-DIST,-DIST,0);
+    Static3D move1  = new Static3D(IVY_M-0.5f,IVY_M-0.5f,0);
 
     VertexEffect[] effect = new VertexEffect[5];
 
-    effect[0] = new VertexEffectScale(2.0f);
+    effect[0] = new VertexEffectScale(1/IVY_C);
     effect[1] = new VertexEffectMove(move1);
     effect[2] = new VertexEffectScale(new Static3D(1,1,-1));
     effect[3] = new VertexEffectRotate(angle1,axisX,center);
diff --git a/src/main/java/org/distorted/objects/FactorySticker.java b/src/main/java/org/distorted/objects/FactorySticker.java
index 6592ecee..2920a3ab 100644
--- a/src/main/java/org/distorted/objects/FactorySticker.java
+++ b/src/main/java/org/distorted/objects/FactorySticker.java
@@ -25,6 +25,8 @@ import android.graphics.Paint;
 import static org.distorted.objects.TwistyObject.TEXTURE_HEIGHT;
 import static org.distorted.objects.TwistyObject.COLOR_BLACK;
 import static org.distorted.objects.FactoryCubit.IVY_D;
+import static org.distorted.objects.FactoryCubit.IVY_C;
+import static org.distorted.objects.FactoryCubit.IVY_M;
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
@@ -168,23 +170,20 @@ class FactorySticker
     paint.setStyle(Paint.Style.FILL);
     canvas.drawRect(left,top,left+TEXTURE_HEIGHT,top+TEXTURE_HEIGHT,paint);
 
-    float CORR = 0.5f;
-    float DIST = 0.4f;
-
     paint.setColor(COLOR_BLACK);
     paint.setStyle(Paint.Style.STROKE);
-    paint.setStrokeWidth(CORR*stroke*TEXTURE_HEIGHT);
+    paint.setStrokeWidth(IVY_C*stroke*TEXTURE_HEIGHT);
 
-    float tmp1 = ((IVY_D-0.5f)-DIST)*CORR;
+    float tmp1 = ((IVY_D-0.5f)-IVY_M)*IVY_C;
     float cx1 = TEXTURE_HEIGHT*(tmp1 + 0.5f);
     float cy1 = TEXTURE_HEIGHT*(0.5f - tmp1);
 
-    float halfL1 = CORR*TEXTURE_HEIGHT*(1.0f-2*IVY_D);
+    float halfL1 = IVY_C*TEXTURE_HEIGHT*(1.0f-2*IVY_D);
 
     canvas.drawArc( left+cx1-halfL1, top+cy1-halfL1, left+cx1+halfL1, top+cy1+halfL1, 270, 90, false, paint);
 
-    float tmp2 = (+0.5f-DIST)*CORR;
-    float tmp3 = (-0.5f-DIST)*CORR;
+    float tmp2 = (+0.5f-IVY_M)*IVY_C;
+    float tmp3 = (-0.5f-IVY_M)*IVY_C;
 
     float x0 = TEXTURE_HEIGHT*(+tmp2 + 0.5f);
     float y0 = TEXTURE_HEIGHT*(-tmp3 + 0.5f);
@@ -196,13 +195,13 @@ class FactorySticker
     canvas.drawLine(left+x0,top+y0,left+x1,top+y1,paint);
     canvas.drawLine(left+x1,top+y1,left+x2,top+y2,paint);
 
-    float tmp4 = ((0.5f-stroke/2-radius/2)-DIST)*CORR;
+    float tmp4 = ((0.5f-stroke/2-radius/2)-IVY_M)*IVY_C;
     float cx2 = TEXTURE_HEIGHT*(tmp4 + 0.5f);
     float cy2 = TEXTURE_HEIGHT*(0.5f - tmp4);
 
-    float halfL2 = CORR*TEXTURE_HEIGHT*radius;
+    float halfL2 = IVY_C*TEXTURE_HEIGHT*radius;
 
-    paint.setStrokeWidth(CORR*radius*TEXTURE_HEIGHT);
+    paint.setStrokeWidth(IVY_C*radius*TEXTURE_HEIGHT);
     canvas.drawArc( left+cx2-halfL2, top+cy2-halfL2, left+cx2+halfL2, top+cy2+halfL2, 270, 90, false, paint);
     }
 
@@ -228,5 +227,16 @@ class FactorySticker
 
     canvas.drawArc( left+cx1-halfL, top+cy1-halfL, left+cx1+halfL, top+cy1+halfL, 270, 90, false, paint);
     canvas.drawArc( left+cx2-halfL, top+cy2-halfL, left+cx2+halfL, top+cy2+halfL,  90, 90, false, paint);
+
+    float tmp = TEXTURE_HEIGHT*(IVY_D+stroke*0.5f+radius*0.5f);
+    float cx3 = tmp;
+    float cy3 = tmp;
+    float cx4 = TEXTURE_HEIGHT - cx3;
+    float cy4 = TEXTURE_HEIGHT - cy3;
+    float halfR = TEXTURE_HEIGHT*radius;
+
+    paint.setStrokeWidth(radius*TEXTURE_HEIGHT);
+    canvas.drawArc( left+cx3-halfR, top+cy3-halfR, left+cx3+halfR, top+cy3+halfR, 180, 90, false, paint);
+    canvas.drawArc( left+cx4-halfR, top+cy4-halfR, left+cx4+halfR, top+cy4+halfR,   0, 90, false, paint);
     }
   }
diff --git a/src/main/java/org/distorted/objects/TwistyIvy.java b/src/main/java/org/distorted/objects/TwistyIvy.java
index b66817fd..7f719fbd 100644
--- a/src/main/java/org/distorted/objects/TwistyIvy.java
+++ b/src/main/java/org/distorted/objects/TwistyIvy.java
@@ -235,7 +235,7 @@ public class TwistyIvy extends TwistyObject
     int COLORS = FACE_COLORS.length;
     FactorySticker factory = FactorySticker.getInstance();
     float S = 0.08f;
-    float R = 0.06f;
+    float R = 0.12f;
 
     if( face<COLORS )
       {
