A normal vector to a curve at a particular point is a vector perpendicular to the tangent vector of the curve at that point (also called a gradient). For an implicit 2D function in the form $f(x,y) = 0$, the 2D gradient is:

$$ \nabla f(x,y) = \left ( \frac{\partial f}{\partial x}, \frac{\partial f}{\partial y} \right ) $$

For an implicit 3D function, the normal is the vector perpendicular to the surface. The surface normal at a point $\mathbf{p}$ is given by the gradient of the implicit function:

$$ \mathbf{n} = \nabla f (\mathbf{p}) = \left ( \frac{\partial f(\mathbf{p})}{\partial x}, \frac{\partial f(\mathbf{p})}{\partial y}, \frac{\partial f(\mathbf{p})}{\partial z} \right ) $$

For a plane, we know that the dot product of the normal $\mathbf{n}$ and any vector that lies in the plane is zero. Therefore, we can model a plane as the following implicit equation:

$$ (\mathbf{p} - \mathbf{a}) \cdot \mathbf{n} = 0 $$

Where $\mathbf{p}$ and $\mathbf{a}$ are any two points lying on the plane. Sometimes we want the equation of a plane through points $\mathbf{a, b, c}$. The normal can be found by taking the cross product of any two vectors on the plane:

$$ \mathbf{n} = (\mathbf{b} - \mathbf{a}) \times (\mathbf{c} - \mathbf{a}) $$

Transforming Normal Vectors

Normal vectors do not transform the way we would like when they’re multiplied by a transformation matrix. If the points on a surface are transformed by the transformation matrix $\mathbf{M}$, a vector $\mathbf{t}$ tangent to the surface will still be tangent to the transformed surface. However, a surface normal vector $\mathbf{n}$ may not be normal to the transformed surface.

For example, when a transformation matrix $\mathbf{M} = \mathbf{H_x}(s)$ that skews points toward the $x$-axis multiplies the normal vector $\mathbf{n}$, the resulting vector $\mathbf{Mn}$ is not normal to the surface. We would like to find a transformation matrix $\mathbf{N}$ so that $\mathbf{Nn}$ is indeed the surface normal.

Transforming Normal

Transforming Normal

To find the value of $\mathbf{N}$, we start from the fact that the normal $\mathbf{n}$ and the tangent $\mathbf{t}$ are perpendicular:

$$ \mathbf{ n \cdot t } = 0 $$

Expressed as a matrix multiplication:

$$ \begin{equation} \label{perpendicular} \mathbf{n}^T \mathbf{t} = 0 \end{equation} $$

After the transformation, they’re still perpendicular, so:

$$ (\mathbf{Nn})^T \mathbf{Mt} = 0 $$

Applying the transpose:

$$ \begin{equation} \label{post-transformation} \mathbf{n}^T \mathbf{N}^T \mathbf{Mt} = 0 \end{equation} $$

Relating \eqref{post-transformation} with \eqref{perpendicular}, we see that the only way that both equations hold true is that:

$$ \mathbf{N}^T \mathbf{M} = \mathbf{I} $$

The value of $\mathbf{N}$ is then:

$$ \begin{align*} \mathbf{N}^T \mathbf{M} &= \mathbf{I} \\ \mathbf{N}^T \mathbf{MM}^{-1} &= \mathbf{IM}^{-1} \\ \mathbf{N}^T &= \mathbf{M}^{-1} \\ \mathbf{N} &= (\mathbf{M}^{-1})^T \end{align*} $$