def TransLine(cls, lineDualQuaternion, dualQuaternion): Lb = lineDualQuaternion[0] Mb = lineDualQuaternion[1] Q = dualQuaternion[0] QImage = dualQuaternion[1] QConj = Quaternion.QuaternionConj(Q) t = 2 * Quaternion.QuaternionProduct(QImage, QConj) tConj = Quaternion.QuaternionConj(t) La = Quaternion.rotateByQuaternion(Q, Lb) Ma = Quaternion.rotateByQuaternion(Q, Mb) \ + 0.5*(Quaternion.QuaternionProduct(La, tConj) + Quaternion.QuaternionProduct(t, La)) return (La, Ma)
def CheckNormalized(cls, dualQuaternion): Q = dualQuaternion[0] QConj = Quaternion.QuaternionConj(Q) QImage = dualQuaternion[1] QImageConj = Quaternion.QuaternionConj(QImage) RealPart = Quaternion.QuaternionProduct(Q, QConj) ImagePart = Quaternion.QuaternionProduct( Q, QImageConj) + Quaternion.QuaternionProduct(QImage, QConj) if np.linalg.norm(RealPart) == 1 and -1.0e-10 < np.linalg.norm( ImagePart) < 1.0e-10: return True else: print 'RealPart:\n', RealPart print 'ImagePart:\n', ImagePart return False