chiark / gitweb /
helixish: Introduce matmultiply and augmatmultiply
authorIan Jackson <ijackson@chiark.greenend.org.uk>
Sun, 26 Nov 2017 22:24:55 +0000 (22:24 +0000)
committerIan Jackson <ijackson@chiark.greenend.org.uk>
Sun, 26 Nov 2017 22:24:55 +0000 (22:24 +0000)
uses matrix to do matrix multiply
bugfix

Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
helixish.py

index c5c30d785408b1bf2ab771d48d7a3a6b0035316e..850b225985874f5835489b0f6cb35ab6a8cb502e 100644 (file)
@@ -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))