# Difference between revisions of "Motor"

A motor is an operator that performs a proper isometry in Euclidean space through the sandwich product. Such isometries encompass all possible combinations of any number of rotations and translations. The name motor is a portmanteau of motion operator.

In the 4D projective geometric algebra $$\mathcal G_{3,0,1}$$, a motor $$\mathbf Q$$ has the general form

$$\mathbf Q = r_x \mathbf e_{41} + r_y \mathbf e_{42} + r_z \mathbf e_{43} + r_w {\large\unicode{x1d7d9}} + u_x \mathbf e_{23} + u_y \mathbf e_{31} + u_z \mathbf e_{12} + u_w$$ .

To possess the geometric property, the components of $$\mathbf Q$$ must satisfy the equation

$$r_x u_x + r_y u_y + r_z u_z + r_w u_w = 0$$ .

Motors are capable of representing any general screw motion consisting of a rotation about a line combined with a displacement along the same line. By Chasles’ theorem, all rigid motions in 3D space are screw motions.

## Simple Motors

If $$u_w = 0$$ (i.e., the scalar part $$Q_{\mathbf 1}$$ is zero), then the motor $$\mathbf Q$$ is called a simple motor. Every simple motor represents either a pure translation or a pure rotation about a line without any displacement along that line.

In the case of a pure translation, the motor $$\mathbf T$$ is given by

$$\mathbf T = {t_x \mathbf e_{23} + t_y \mathbf e_{31} + t_z \mathbf e_{12} + \large\unicode{x1d7d9}}$$ ,

and this performs a translation by twice the displacement vector $$(t_x, t_y, t_z)$$.

In the case of a pure rotation, the motor $$\mathbf R$$ is given by

$$\mathbf R = \mathbf L\sin\phi + {\large\unicode{x1d7d9}}\cos\phi$$ ,

and this performs a rotation by twice the angle $$\phi$$ about the line $$\mathbf L$$.

## Norm

The bulk norm of a motor $$\mathbf Q$$ is given by

$$\left\Vert\mathbf Q\right\Vert_\unicode{x25CF} = \sqrt{\mathbf Q \mathbin{\unicode{x27D1}} \mathbf{\tilde Q}} = \sqrt{u_x^2 + u_y^2 + u_z^2 + u_w^2}$$ ,

and its weight norm is given by

$$\left\Vert\mathbf Q\right\Vert_\unicode{x25CB} = \sqrt{\mathbf Q \mathbin{\unicode{x27C7}} \smash{\mathbf{\underset{\Large\unicode{x7E}}{Q}}}\vphantom{\mathbf{\tilde Q}}} = {\large\unicode{x1D7D9}}\sqrt{r_x^2 + r_y^2 + r_z^2 + r_w^2}$$ .

The geometric norm of a motor $$\mathbf Q$$ is thus

$$\left\Vert\mathbf Q\right\Vert = \sqrt{\dfrac{u_x^2 + u_y^2 + u_z^2 + u_w^2}{r_x^2 + r_y^2 + r_z^2 + r_w^2}}$$ ,

and this is equal to half the distance that the origin is moved by the operator.

A motor is unitized when $$r_x^2 + r_y^2 + r_z^2 + r_w^2 = 1$$.

## Exponential Form

A motor $$\mathbf Q$$ can be expressed as the exponential of a unitized line $$\mathbf L$$ multiplied by $$d + \phi{\large\unicode{x1D7D9}}$$, where $$\phi$$ is half the angle of rotation about the line $$\mathbf L$$, and $$d$$ is half the displacement distance along the line $$\mathbf L$$. The exponential form can be written as

$$\mathbf Q = \exp_\unicode{x27C7}((d + \phi{\large\unicode{x1D7D9}}) \mathbin{\unicode{x27C7}} \mathbf L) = \cos_\unicode{x27C7}(d + \phi{\large\unicode{x1D7D9}}) + \sin_\unicode{x27C7}(d + \phi{\large\unicode{x1D7D9}}) \mathbin{\unicode{x27C7}} \mathbf L$$ .

This expands to

$$\mathbf Q = \mathbf L\sin\phi + (d \mathbin{\unicode{x27C7}} \mathbf L)\cos\phi - d\sin\phi + {\large\unicode{x1D7D9}}\cos\phi$$ ,

and replacing the line $$\mathbf L$$ with its components gives us

$$\mathbf Q = (v_x \mathbf e_{41} + v_y \mathbf e_{42} + v_z \mathbf e_{43} + m_x \mathbf e_{23} + m_y \mathbf e_{31} + m_z \mathbf e_{12})\sin\phi + (dv_x \mathbf e_{23} + dv_y \mathbf e_{31} + dv_z \mathbf e_{12})\cos\phi - d\sin\phi + {\large\unicode{x1D7D9}}\cos\phi$$ .

A motor in exponential form is always unitized, and its geometric norm can be written as

$$\left\Vert\mathbf Q\right\Vert = \sqrt{d^2 + (m_x^2 + m_y^2 + m_z^2)\sin^2\phi}$$ .

## Logarithm

Given an arbitrary unitized motor $$\mathbf Q$$ with $$|r_w| < 1$$, the values of $$\mathbf L$$, $$d$$, and $$\phi$$ can be determined from the components of $$\mathbf Q$$, essentially taking the logarithm of a motor. First, the scalar and antiscalar terms satisfy the equations

$$u_w = - d\sin\phi$$
$$r_w = \cos\phi$$ .

Assuming that $$\phi > 0$$, we define $$s = \sin\phi = \sqrt{1 - r_w^2}$$. Then,

$$d = -\dfrac{u_w}{s}$$
$$\phi = \tan^{-1}\left(\dfrac{s}{r_w}\right)$$ .

If $$r_w = 0$$, then we assign $$\phi = \pi/2$$. If $$r_w < 0$$, then we can add $$\pi$$ to $$\phi$$ to make the angle positive, but this is not required.

The components of $$\mathbf L$$ are then given by

$$(v_x, v_y, v_z) = \dfrac{1}{s}(r_x, r_y, r_z)$$
$$(m_x, m_y, m_z) = \dfrac{1}{s}\left[(u_x, u_y, u_z) - dr_w(v_x, v_y, v_z)\right] = \dfrac{1}{s}\left[(u_x, u_y, u_z) + \dfrac{r_wu_w}{s^2}(r_x, r_y, r_z)\right]$$ .

In the special case that $$r_w = \pm 1$$, the motor must be a pure translation with $$d = 0$$, $$\phi = 0$$, and $$\mathbf (v_x, v_y, v_z) = (0, 0, 0)$$.

## Square Root

The square root of a quaternion can be calculated by summing with the identity and renormalizing. If we attempt to do the same thing with a motor $$\mathbf Q$$, we find that it works only under certain conditions. However, such a calculation does give us a starting point from which we can make a correction for the general case.

Using the exponential form of $$\mathbf Q$$, we first examine the weight norm of $$\mathbf Q + {\large\unicode{x1D7D9}}$$ and find that

$$\left\Vert\mathbf Q + \smash{\large\unicode{x1D7D9}}\right\Vert_\unicode{x25CB} = \sqrt{\sin^2\phi + (\cos^2\phi + 1)^2} = \sqrt{\vphantom{\sin^2\phi}2 + 2Q_\smash{\large\unicode{x1D7D9}}}$$ ,

where $$Q_{\large\unicode{x1D7D9}} = \cos\phi$$. Applying the trigonometric identity $$\cos^2(\phi/2) = (1 + \cos\phi)/2$$, we can rewrite this as

$$\left\Vert\mathbf Q + \smash{\large\unicode{x1D7D9}}\right\Vert_\unicode{x25CB} = 2\cos(\phi/2)$$ .

Applying several more trigonometric identities, we now observe

$$\dfrac{\mathbf Q + {\large\unicode{x1D7D9}}}{\left\Vert\mathbf Q + \smash{\large\unicode{x1D7D9}}\right\Vert_\unicode{x25CB}} = \dfrac{\mathbf Q + {\large\unicode{x1D7D9}}}{2\cos(\phi/2)} = \mathbf L\sin(\phi/2) + \left(\dfrac{d}{2} \mathbin{\unicode{x27C7}} \mathbf L\right)\cos(\phi/2) - \dfrac{d}{2}\sin(\phi/2) + {\large\unicode{x1D7D9}}\cos(\phi/2) - \left(\dfrac{d}{2} \mathbin{\unicode{x27C7}} \mathbf L\right)\sin(\phi/2)\tan(\phi/2) - \dfrac{d}{2}\sin(\phi/2)$$ .

The first four terms are exactly the square root of $$\mathbf Q$$ because the distance $$d$$ and angle $$\phi$$ have both been halved. But there are two additional terms that we need to eliminate. If just so happens that

$$\dfrac{\mathbf Q + {\large\unicode{x1D7D9}}}{\left\Vert\mathbf Q + \smash{\large\unicode{x1D7D9}}\right\Vert_\unicode{x25CB}} \mathbin{\unicode{x27C7}} \dfrac{d}{2}\tan(\phi/2) = \left(\dfrac{d}{2} \mathbin{\unicode{x27C7}} \mathbf L\right)\sin(\phi/2)\tan(\phi/2) + \dfrac{d}{2}\sin(\phi/2)$$ ,

which means that

$$\sqrt{\mathbf Q} = \dfrac{\mathbf Q + {\large\unicode{x1D7D9}}}{\sqrt{2 + 2Q_\smash{\large\unicode{x1D7D9}}}} \mathbin{\unicode{x27C7}} \left({\large\unicode{x1D7D9}} + \dfrac{d}{2}\tan(\phi/2)\right)$$ .

The scalar component of $$\mathbf Q$$ can be rewritten as $$Q_{\mathbf 1} = -d\sin\phi = -2d\sin(\phi/2)\cos(\phi/2)$$. Dividing this by $$2 + 2Q_{\large\unicode{x1D7D9}} = 4\cos^2(\phi/2)$$ yields

$$\dfrac{Q_\mathbf 1}{2 + 2Q_{\large\unicode{x1D7D9}}} = -\dfrac{d}{2}\tan(\phi/2)$$ .

The square root of a general motor $$\mathbf Q$$ is thus given by

$$\sqrt{\mathbf Q} = \dfrac{\mathbf Q + {\large\unicode{x1D7D9}}}{\sqrt{2 + 2Q_\smash{\large\unicode{x1D7D9}}}} \mathbin{\unicode{x27C7}} \left({\large\unicode{x1D7D9}} - \dfrac{Q_\mathbf 1}{2 + 2Q_{\large\unicode{x1D7D9}}}\right)$$ .

If $$\mathbf Q$$ is a simple motor, then $$Q_{\mathbf 1} = 0$$, and this reduces to

$$\sqrt{\mathbf Q} = \dfrac{\mathbf Q + {\large\unicode{x1D7D9}}}{\sqrt{2 + 2Q_\smash{\large\unicode{x1D7D9}}}} = \dfrac{\mathbf Q + {\large\unicode{x1D7D9}}}{\left\Vert\mathbf Q + \smash{\large\unicode{x1D7D9}}\right\Vert_\unicode{x25CB}}$$ .

## Factorization

Any unitized motor $$\mathbf Q$$ can be factored into the product of a motor $$\mathbf R = r_x \mathbf e_{41} + r_y \mathbf e_{42} + r_z \mathbf e_{43} + r_w {\large\unicode{x1D7D9}}$$ corresponding to a pure rotation about a line through the origin and a motor $$\mathbf T$$ corresponding to a pure translation by calculating

$$\mathbf T = \mathbf Q \mathbin{\unicode{x27C7}} \mathbf{\underset{\Large\unicode{x7E}}{R}}$$ .

The motor $$\mathbf T$$ is then given by

$$\mathbf T = (r_yu_z - r_zu_y + u_xr_w - r_xu_w)\mathbf e_{23} + (r_zu_x - r_xu_z + u_yr_w - r_yu_w)\mathbf e_{31} + (r_xu_y - r_yu_x + u_zr_w - r_zu_w)\mathbf e_{12} + {\large\unicode{x1d7d9}}$$ .

The original motor $$\mathbf Q$$ can now be expressed as

$$\mathbf Q = \mathbf T \mathbin{\unicode{x27C7}} \mathbf R$$ ,

where both $$\mathbf R$$ and $$\mathbf T$$ are unitized simple motors.

## Conversion from Motor to Matrix

Given a specific unitized motor $$\mathbf Q$$, define the matrices

$$\mathbf A = \begin{bmatrix}1 - 2(r_y^2 + r_z^2) & 2r_xr_y & 2r_zr_x & 2(r_yu_z - r_zu_y) \\ 2r_xr_y & 1 - 2(r_z^2 + r_x^2) & 2r_yr_z & 2(r_zu_x - r_xu_z) \\ 2r_zr_x & 2r_yr_z & 1 - 2(r_x^2 + r_y^2) & 2(r_xu_y - r_yu_x) \\ 0 & 0 & 0 & 1\end{bmatrix}$$

and

$$\mathbf B = \begin{bmatrix}0 & -2r_zr_w & 2r_yr_w & 2(r_wu_x - r_xu_w) \\ 2r_zr_w & 0 & -2r_xr_w & 2(r_wu_y - r_yu_w) \\ -2r_yr_w & 2r_xr_w & 0 & 2(r_wu_z - r_zu_w) \\ 0 & 0 & 0 & 0\end{bmatrix}$$ .

Then the corresponding 4×4 matrix $$\mathbf M$$ that transforms a point $$\mathbf p$$, regarded as a column matrix, as $$\mathbf p' = \mathbf{Mp}$$ is given by

$$\mathbf M = \mathbf A + \mathbf B$$ .

The inverse of $$\mathbf M$$, which transforms a plane $$\mathbf f$$, regarded as a row matrix, as $$\mathbf f' = \mathbf{fM^{-1}}$$ is given by

$$\mathbf M^{-1} = \mathbf A - \mathbf B$$ .

## Conversion from Matrix to Motor

Let $$\mathbf M$$ be an orthogonal 4×4 matrix with determinant +1 having the form

$$\mathbf M = \begin{bmatrix} M_{00} & M_{01} & M_{02} & M_{03} \\ M_{10} & M_{11} & M_{12} & M_{13} \\ M_{20} & M_{21} & M_{22} & M_{23} \\ 0 & 0 & 0 & 1\end{bmatrix}$$ .

Then, by equating the entries of $$\mathbf M$$ to the entries of $$\mathbf A + \mathbf B$$ from above, we have the following four relationships based on the diagonal entries of $$\mathbf M$$:

$$M_{00} - M_{11} - M_{22} + 1 = 4r_x^2$$
$$M_{11} - M_{22} - M_{00} + 1 = 4r_y^2$$
$$M_{22} - M_{00} - M_{11} + 1 = 4r_z^2$$
$$M_{00} + M_{11} + M_{22} + 1 = 4(1 - r_x^2 - r_y^2 - r_z^2) = 4r_w^2$$

And we have the following six relationships based on the off-diagonal entries of $$\mathbf M$$:

$$M_{21} + M_{12} = 4r_yr_z$$
$$M_{02} + M_{20} = 4r_zr_x$$
$$M_{10} + M_{01} = 4r_xr_y$$
$$M_{21} - M_{12} = 4r_xr_w$$
$$M_{02} - M_{20} = 4r_yr_w$$
$$M_{10} - M_{01} = 4r_zr_w$$

If $$M_{00} + M_{11} + M_{22} \geq 0$$, then we calculate

$$r_w = \pm \dfrac{1}{2}\sqrt{M_{00} + M_{11} + M_{22} + 1}$$ ,

where either sign can be chosen. In this case, we know $$|r_w|$$ is at least $$1/2$$, so we can safely divide by $$4r_w$$ in the last three off-diagonal relationships above to solve for $$r_x$$, $$r_y$$, and $$r_z$$. Otherwise, if $$M_{00} + M_{11} + M_{22} < 0$$, then we select one of the first three diagonal relationships based on the largest diagonal entry $$M_{00}$$, $$M_{11}$$, or $$M_{22}$$. After calculating $$r_x$$, $$r_y$$, or $$r_z$$, we plug its value into two of the first three off-diagonal relationships to solve for the other two values of $$r_x$$, $$r_y$$, and $$r_z$$. Finally, we plug it into one of the last three off-diagonal relationships to solve for $$r_w$$.

Setting $$t_x = M_{03}$$, $$t_y = M_{13}$$, and $$t_z = M_{23}$$, the values of $$u_x$$, $$u_y$$, $$u_z$$, and $$u_w$$ are given by

$$u_x = \dfrac{1}{2}(r_wt_x + r_zt_y - r_yt_z)$$

$$u_y = \dfrac{1}{2}(r_wt_y + r_xt_z - r_zt_x)$$

$$u_z = \dfrac{1}{2}(r_wt_z + r_yt_x - r_xt_y)$$

$$u_w = \dfrac{1}{2}(-r_xt_x - r_yt_y - r_zt_z)$$ .