clifford.tools.orthoFrames2Versor

clifford.tools.orthoFrames2Versor(B, A=None, delta: float = 0.001, eps: Optional[float] = None, det=None, remove_scaling: bool = False)[source]

Determines versor for two frames related by an orthogonal transform

Based on [Cor17, FD11]. This works in Euclidean spaces and, under special circumstances in other signatures. See [Cor17] for limitations/details.

Parameters
  • 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 by B.layout.basis_vectors_lst.

  • 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 of [FD11].

  • 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() for more. See 4.6.2 of [FD11].

Returns

  • R (clifford.MultiVector) – the Versor.

  • rs (list of clifford.MultiVector) – ordered list of found reflectors/rotors.