2 from __future__ import print_function
6 from bezier import BezierSegment
9 class RecursiveBezierishCurve():
10 def __init__(db, cp, depth=10):
11 single = BezierSegment(cp)
12 midpoint = np.array(single.point_at_t(0.5))
13 mid_dirn = single.point_at_t(0.5 + 0.001) - midpoint
14 mid_dirn /= np.linalg.norm(mid_dirn)
16 mid_scale = ocp_factor * 0.5 * (np.linalg.norm(cp[1] - cp[0]) +
17 np.linalg.norm(cp[3] - cp[2]))
19 constructor = lambda ccp: RecursiveBezierishCurve(ccp, depth-1)
21 constructor = BezierSegment
23 db.b0 = constructor([ cp[0],
24 cp[1] * ocp_factor + cp[0] * (1-ocp_factor),
25 midpoint - mid_dirn * mid_scale,
27 db.b1 = constructor([ midpoint,
28 midpoint + mid_dirn * mid_scale,
29 cp[2] * ocp_factor + cp[3] * (1-ocp_factor),
31 def point_at_t(db, t):
33 return db.b0.point_at_t(t*2)
35 return db.b1.point_at_t(t*2 - 1)