# reflections¶

Functions to work with reflections

Terms used in function names:

• mat : array shape (3, 3) (3D non-homogenous coordinates)
• aff : affine array shape (4, 4) (3D homogenous coordinates)
• rfnorm : reflection in plane defined by normal vector and optional point.
 aff2rfnorm(aff) Mirror plane normal vector and point from affine aff mat2rfnorm(mat) Mirror plane normal vector from mat matrix. rfnorm2aff(normal[, point]) Affine to mirror at plane defined by point and normal vector. rfnorm2mat(normal) Matrix to reflect in plane through origin, orthogonal to normal

## aff2rfnorm¶

transforms3d.reflections.aff2rfnorm(aff)

Mirror plane normal vector and point from affine aff

Parameters: aff : array-like, shape (4,4) normal : array shape (3,) vector normal to point (and therefore mirror plane). point : array shape (3,) x, y, x coordinates of point that, together with normal, define the reflection plane. ValueError If there is no eigenvector for aff[:3,:3] with eigenvalue -1 ValueError If determinant of aff[:3, :3] is not close to -1 ValueError If there is no eigenvector for aff with eigenvalue 1.

Examples

>>> v0 = np.random.random(3) - 0.5
>>> v1 = np.random.random(3) - 0.5
>>> M0 = rfnorm2aff(v0, v1)
>>> normal, point = aff2rfnorm(M0)
>>> M1 = rfnorm2aff(normal, point)
>>> np.allclose(M0, M1)
True


## mat2rfnorm¶

transforms3d.reflections.mat2rfnorm(mat)

Mirror plane normal vector from mat matrix.

Parameters: mat : array-like, shape (3,3) normal : array shape (3,) vector normal to point (and therefore mirror plane) ValueError If there is no eigenvector with eigenvalue -1 ValueError If determinant of mat is not close to -1

Examples

>>> normal = np.random.random(3) - 0.5
>>> M0 = rfnorm2mat(normal)
>>> normal = mat2rfnorm(M0)
>>> M1 = rfnorm2mat(normal)
>>> np.allclose(M0, M1)
True


## rfnorm2aff¶

transforms3d.reflections.rfnorm2aff(normal, point=None)

Affine to mirror at plane defined by point and normal vector.

Parameters: normal : 3 element sequence vector normal to point (and therefore mirror plane) point : 3 element sequence x, y, x coordinates of point aff : array shape (4,4)

Notes

Examples

>>> normal = np.random.random(3) - 0.5
>>> point = np.random.random(3) - 0.5
>>> R = rfnorm2aff(normal, point)
>>> np.allclose(2., np.trace(R))
True
>>> np.allclose(point, np.dot(R[:3,:3], point) + R[:3,3])
True


## rfnorm2mat¶

transforms3d.reflections.rfnorm2mat(normal)

Matrix to reflect in plane through origin, orthogonal to normal

Parameters: normal : array-like, shape (3,) vector normal to plane of reflection mat : array shape (3,3)

Notes

The reflection of a vector v in a plane normal to vector a is:

$\mathrm{Ref}_a(v) = v - 2\frac{v\cdot a}{a\cdot a}a$

The entries of the corresponding orthogonal transformation matrix R are given by:

$R_{ij} = I_{ij} - 2\frac{a_i a_j}{\|a\|^2}$

where $$I$$ is the identity matrix.