, A=None, delta=0.001, eps=None, det=None, remove_scaling=False)[source]

Determines verser for two frames related by an orthogonal transform

Based on [1,2]. This works in Euclidean spaces and, under special circumstances in other signatures. see [1] for limitaions/details

  • B (list of vectors, or clifford.Frame) – the set of vectors after the transform, and homogenzation. ie B=(B/B|einf)
  • A (list of vectors, or clifford.Frame) – the set of vectors before the transform. If None we assume A is the basis given B.layout.basis_vectors
  • delta (float) – Tolerance for reflection/rotation determination. If the normalized distance between A[i] and B[i] is larger than delta, we use reflection, otherwise use rotation.
  • eps (float) – Tolerance on spinor determination. if pseudoscalar of A differs in magnitude from pseudoscalar of B by eps, then we have spinor. If None, use the clifford.eps() global eps.
  • det ([+1,-1,None]) – The sign of the determinant of the versor, if known. If it is known a-priori that the versor is a rotation vs a reflection, this fact might be needed to correctly append an additional reflection which leaves transformed points invariant. See 4.6.3 [2].
  • remove_scaling (Bool) – Remove the effects of homogenzation from frame B. This is needed if you are working in CGA, but the input data is given in the original space. See omoh method for more. See 4.6.2 of [2]

  • R (clifford.Multivector) – the Versor.
  • rs (list of clifford.Multivectors) – ordered list of found reflectors/rotors.



[2] Reconstructing Rotations and Rigid Body Motions from Exact Point Correspondences Through Reflections, Daniel Fontijne and Leo Dorst