From b5407ecb3fb1aa316a7d153dc83002f143fb4c04 Mon Sep 17 00:00:00 2001 From: Ian Jackson Date: Sun, 26 Nov 2017 22:24:55 +0000 Subject: [PATCH] helixish: Introduce matmultiply and augmatmultiply uses matrix to do matrix multiply bugfix Signed-off-by: Ian Jackson --- helixish.py | 19 +++++++++++++++---- 1 file changed, 15 insertions(+), 4 deletions(-) diff --git a/helixish.py b/helixish.py index c5c30d7..850b225 100644 --- a/helixish.py +++ b/helixish.py @@ -16,6 +16,15 @@ def augment(v): return np.append(v, 1) def augment0(v): return np.append(v, 0) def unaugment(v): return v[0:3] +def matmultiply(mat,vect): + # both are "array"s + # we would prefer to write mat @ vect + # but that doesn't work in Python 2 + return np.array((vect * np.matrix(mat).T))[0,:] + +def augmatmultiply(mat,unaugvect): + return unaugment(matmultiply(mat, augment(unaugvect))) + findcurve_subproc = None class HelixishCurve(): @@ -49,12 +58,14 @@ class HelixishCurve(): dp, dPQplane_normal, p)); + dbg(dPQplane_basis) dPQplane_basis = np.vstack((dPQplane_basis, [0,0,0,1])) + dbg(dPQplane_basis) dPQplane_into = np.linalg.inv(dPQplane_basis) - dp_plane = unaugment(dPQplane_into * augment0(dp)) - dq_plane = unaugment(dPQplane_into * augment0(dq)) - q_plane = unaugment(dPQplane_into * augment(q)) + dp_plane = augmatmultiply(dPQplane_into, dp) + dq_plane = augmatmultiply(dPQplane_into, dq) + q_plane = augmatmultiply(dPQplane_into, q) dist_pq_plane = np.linalg.norm(q_plane) # two circular arcs of equal maximum possible radius @@ -116,7 +127,7 @@ class HelixishCurve(): 0, sin(tilt), cos(tilt), 0, 0, 0, 0, 1, ]) - findcurve_basis = dPQplane_basis * tilt_basis + findcurve_basis = augmatmultiply(dPQplane_basis, tilt_basis) findcurve_into = np.linalg.inv(findcurve_basis) q_findcurve = unaugment(findcurve_into, augment(q)) -- 2.30.2