chiark / gitweb /
better cp positions
authorIan Jackson <ijackson@chiark.greenend.org.uk>
Sun, 5 Nov 2017 00:00:36 +0000 (00:00 +0000)
committerIan Jackson <ijackson@chiark.greenend.org.uk>
Sun, 5 Nov 2017 00:00:36 +0000 (00:00 +0000)
Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
moebius.py

index 0fd9ce3a7e09a529316bd8e6229c31b174399b2c..9fe6e3c709fdbefd4bb3a94a9ecd9580c119bf89 100644 (file)
@@ -61,6 +61,7 @@ class MoebiusHalf:
     m.edge    = Twirler(origin,  unit_z, unit_x, -2, tau/2)
     m.midline = Twirler(-unit_z, unit_z, unit_y, -0.5, 0)
     m.nu      = nu
+    #m._cp2b = BezierSegment([(x,) for x in [0.2, 0.2, 1]])
     m._beziers = [ m._bezier(u) for u in np.linspace(0, 1, nu+1) ]
   def _bezier(m,u):
     theta = u * tau
@@ -68,8 +69,12 @@ class MoebiusHalf:
     cp[0] =               m.edge   .point(theta)
     cp[3] =               m.midline.point(theta*2)
     ncp3 = np.linalg.norm(cp[3])
-    cp2scale = ncp3
-    cp1scale = 0.75
+    cpt = ncp3 * ncp3 / 4
+    #cp2scale = m._cp2b.point_at_t(ncp3)[0]
+    cp2scale = 1.50 * cpt + 0.33 * (1-cpt)
+    cp1scale = 0.75 * cpt + 0.33 * (1-cpt)
+    print('u=%d ncp3=%f cp2scale=%f' % (u, ncp3, cp2scale),
+          file=sys.stderr)
     cp[1] = cp[0] + cp1scale * m.edge   .dirn (theta)
     cp[2] = cp[3] + cp2scale * m.midline.dirn (theta*2)
     return BezierSegment(cp)
@@ -105,8 +110,8 @@ class Moebius(MoebiusHalf):
     else:
       it = m.nw - w
       iu = m.nv + v
-    print('v,w=%d,%d => it,iu=%d,%d' % (v,w,it,iu),
-          file=sys.stderr)
+    #print('v,w=%d,%d => it,iu=%d,%d' % (v,w,it,iu),
+    #      file=sys.stderr)
     return { 't': m._t_vals[it], 'iu': iu }
 
   def point(m, v, w):