From 66469d04776a306afb8ec217c9be5a72bb1bb807 Mon Sep 17 00:00:00 2001 From: Ian Jackson Date: Mon, 6 Nov 2017 13:51:35 +0000 Subject: [PATCH] introduce MoebiusHalf.details (nfc) Signed-off-by: Ian Jackson --- moebius.py | 30 ++++++++++++++++++------------ 1 file changed, 18 insertions(+), 12 deletions(-) diff --git a/moebius.py b/moebius.py index ae55a3a..4b8d640 100644 --- a/moebius.py +++ b/moebius.py @@ -114,27 +114,33 @@ class MoebiusHalf: ''' return np.array(m._beziers[iu].point_at_t(t)) - def normal(m, iu, t): - '''at the top (iu=t=0), is +ve in the +ve y direction''' + def details(m, iu, t): + ''' + returns tuple of 4 vectors: + - point location + - normal (+ve is in the +ve y direction at iu=t=0) unit vector + - along extend (towrds +ve iu) unit vector + - along traverse (towards +ve t) unit vector + ''' + if iu == m.nu: + return m.details(0, t) p = m.point(iu, t) + vec_t = unit_v( m.point(iu, t + 0.01) - p ) if t == 0: - dirn = m.edge.dirn(m._thetas[iu], extra_zeta=-tau/4) - elif iu == m.nu: - return m.normal(0, t) + normal = m.edge.dirn(m._thetas[iu], extra_zeta=-tau/4) + vec_u = np.cross(vec_t, normal) else: - vec_t = m.point(iu, t + 0.01) - p - vec_u = m.point(iu+1, t) - p - dirn = np.cross(vec_u, vec_t) - dirn = unit_v(dirn) - return dirn + vec_u = unit_v( m.point(iu+1, t) - p ) + normal = np.cross(vec_u, vec_t) + return (p, normal, vec_u, vec_t) def point_offset(m, iu, t, offset): ''' offset by offset perpendicular to the surface at the top (iu=t=0), +ve offset is in the +ve y direction ''' - p = m.point(iu, t) - return p + offset * m.normal(iu, t) + p, normal, dummy, dummy = m.details(iu, t) + return p + offset * normal class Moebius(): def __init__(m, nv, nw): -- 2.30.2