2 from __future__ import print_function
4 from bezier import BezierSegment
8 class DoubleCubicBezier():
10 single = BezierSegment(cp)
11 midpoint = np.array(single.point_at_t(0.5))
12 mid_dirn = single.point_at_t(0.5 + 0.001) - midpoint
13 mid_dirn /= np.linalg.norm(mid_dirn)
15 mid_scale = ocp_factor * 0.5 * (np.linalg.norm(cp[1] - cp[0]) +
16 np.linalg.norm(cp[3] - cp[2]))
17 db.b0 = BezierSegment([ cp[0],
18 cp[1] * ocp_factor + cp[0] * (1-ocp_factor),
19 midpoint - mid_dirn * mid_scale,
21 db.b1 = BezierSegment([ midpoint,
22 midpoint + mid_dirn * mid_scale,
23 cp[2] * ocp_factor + cp[3] * (1-ocp_factor),
25 def point_at_t(db, t):
27 return db.b0.point_at_t(t*2)
29 return db.b1.point_at_t(t*2 - 1)
31 class DiscreteBezier():
32 def __init__(b, cp, nt, bezier_constructor=DoubleCubicBezier):
34 b._t_vals = np.linspace(0, 1, b.nt+1)
35 b._continuous_bezier = bezier_constructor(cp)
36 def point_at_it(b, it):
38 return b._continuous_bezier.point_at_t(t)