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
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)
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):