# Bivector normalization

In source code of example libraries and in the cheat sheet bivector normalization is done by a simple division of elements by euclidean norm. But what about pseudo-scalar? Normalized bivector m should fulfill the following condition: m \bar{m} = 1. If my understanding is correct, it means that not only scalar part s must be equal to \pm\sqrt{1 - e_{12}^2 - e_{31}^2 - e_{23}^2}, but also that pseudo-scalar part e_{0123} must be equal to -\frac{e_{01}e_{23} + e_{02}e_{31} + e_{03}e_{12}}{s}.

So why the pseudo-scalar normalization part is omitted in the website materials? What are consequences of applying motor which was normalized only for the scalar part?

Also in the cheat sheet there is the following line:

Typically a normalized element n satisfies n\tilde{n} = \pm 1.

Shouldn’t it use conjugate \bar{n} instead of reverse?

Hi @newpavlov, thanks for the question, it’s a good one.

The formulas on the cheat sheet are limited to lines, not general bivectors. Recall that a line is a bivector \ell such that \ell \wedge \ell = 0. That’s equivalent to the condition that \ell\widetilde{\ell} \in \mathbb{R}. Then the normalization formulas work.

The situation with a general bivector as you point out is more complicated since for a non-simple bivector \Sigma, \Sigma\widetilde{\Sigma} = s + p\textbf{I} where p\neq 0. What is usually done for the general bivector is to compute its axis, which is a line \ell such that \Sigma = (c+d\mathbf{I})\ell. That essentially decomposes \Sigma into two lines, one of which, c\ell, is euclidean and the other which, (d\ell)\mathbf{I}, is ideal, such that the ideal line is perpendicular to the euclidean line (like the equator is perpendicular to the north pole). That’s the special form needed to exponentiate a bivector to produce a rotor for a screw motion: the rotor will rotate around \ell while at the same time translating along \ell. The ratio \dfrac{d}{c} is called the pitch of the screw and expresses the ratio of the translation motion to the rotation motion. Consult Sec. 8.1.3 of the course notes to find out more about the axis, and 8.1.6 to find out about exponentiation of bivectors.

Then I think you will recognize that the formula on the cheat sheet that calculates the logarithm of a rotor also contains, somewhat hidden, the calculations needed to calculate the axis of its bivector part.

Using a simple bivector, that is, a line, to create a rotor will produce a pure rotation about the line when it is euclidean (pitch 0), and a translation when the line is ideal (pitch \infty).

My current interest lies in using bivectors to represent general roto-tanslations. I could’ve used dual quaternions, but 3D PGA has some niceties which I think will be useful in my work. For now I don’t need exponentiation, so I don’t use the decomposed form.

In my code I have an optimization process which outputs 6 arbitrary grade 2 coefficients, using which scalar and pseudo-scalar parts are computed using formulas in the OP. The resulting motor is then used to transform points, lanes and planes. Is it a correct approach in your opinion?

I understand that non-normalized bivectors can represent similarity transformation (i.e. Sim(3)), but I do not quite understand that kind of transformation we would get if both scalar and pseudo-scalar part haven’t been properly normalized (i.e. if all 8 motor coefficients are arbitrary).

BTW on my system in the Evince viewer the cheat sheet PDF has footnote and outer links in incorrect positions (red and light green rectangles).

@newpavlov I think you’ll be happy with the choice to move from dual quaternions to PGA. You are then free to choose to learn more about what else PGA can do as time and interest permits.

If I understand your question correctly you are asking is: what kind of transformation do you get if you use an element g of the even subalgebra, that doesn’t satisfy g\widetilde{g}=1, as a versor gX\widetilde{g}? For simplicity it could help to write g = (a+b\mathbf{I})\hat{g} where \hat{g}\widetilde{\hat{g}}=1; then it’s only necessary to consider what effect using a+b\mathbf{I} as a versor has, since \hat{g} is a rotor. Assuming you’re in euclidean PGA (\mathbf{I}^2=0) then it looks like points and planes are just multiplied by a^2 which, projectively, doesn’t change anything unless a=0. The effect on lines is a bit more complicated; a line \ell goes to a^2\ell-2ab\ell\mathbf{I}. So a simple bivector is mapped to a non-simple one, which is … weird. In math-ese, this versor applied to lines produces a mixture of the original configuration and its orthogonal complement.

I wrote about such versors \cos{t}+\sin{t}\mathbf{I} in my thesis
in Sec. 7.12 “The continuous interpolation of the metric polarity” where I chose the more interesting case \mathbf{I}^2=1 that corresponds to the 3-dimensional sphere, which shows how to continuously transform a configuration into its orthogonal complement. (There’s of course a trick since the orthogonal complement has the opposite grade.)

I’m not aware of how such versors a+b\mathbf{I} can be used to implement similarity transformations. Please post if you find out anything in that direction.