From fcd171f83b75a9db9cd7969c90f00210b004ab3e Mon Sep 17 00:00:00 2001 From: Ian Jackson Date: Sun, 5 Nov 2017 00:00:36 +0000 Subject: [PATCH] better cp positions Signed-off-by: Ian Jackson --- moebius.py | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/moebius.py b/moebius.py index 0fd9ce3..9fe6e3c 100644 --- a/moebius.py +++ b/moebius.py @@ -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): -- 2.30.2