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.
|
Mirror plane normal vector and point from affine aff |
|
Mirror plane normal vector from mat matrix. |
|
Affine to mirror at plane defined by point and normal vector. |
|
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
- affarray-like, shape (4,4)
- Returns
- normalarray shape (3,)
vector normal to point (and therefore mirror plane).
- pointarray shape (3,)
x, y, x coordinates of point that, together with normal, define the reflection plane.
- Raises
- 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
- matarray-like, shape (3,3)
- Returns
- normalarray shape (3,)
vector normal to point (and therefore mirror plane)
- Raises
- 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
- normal3 element sequence
vector normal to point (and therefore mirror plane)
- point3 element sequence
x, y, x coordinates of point
- Returns
- affarray shape (4,4)
Notes
See
rfnorm2mat()
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
- normalarray-like, shape (3,)
vector normal to plane of reflection
- Returns
- matarray shape (3,3)
Notes
http://en.wikipedia.org/wiki/Reflection_(mathematics)
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.