+ return np.array(m._beziers[iu].point_at_t(t))
+
+ def point_offset(m, iu, t, offset):
+ '''
+ offset by offset perpendicular to the surface
+ at the top (iu=t=0), in the y direction
+ '''
+ p = MoebiusHalf.point(m, iu, t)
+ if t == 0:
+ dirn = m.edge.dirn(m._thetas[iu], extra_zeta=-tau/4)
+ elif iu == m.nu:
+ return MoebiusHalf.point_offset(m, 0, 1-t, -offset)
+ else:
+ vec_t = MoebiusHalf.point(m, iu, t + 0.01) - p
+ vec_u = MoebiusHalf.point(m, iu+1, t) - p
+ dirn = np.cross(vec_u, vec_t)
+ return p + offset * dirn / np.linalg.norm(dirn)