pub struct Reflection { /* private fields */ }Expand description
Reflection in the plane through origin with unit normal:
p ↦ p − 2((p − o)·n) n. Lengths and angles are preserved and
handedness is reversed, which is why it is a type of its own and not an
crate::Isometry, whose every value is proper (ADR-0031).
use arris_math::{Point3, Reflection, Vec3};
let r = Reflection::new(Point3::new(0.0, 0.0, 1.0), Vec3::z()).unwrap();
assert_eq!(r.apply(Point3::new(1.0, 2.0, 3.0)), Point3::new(1.0, 2.0, -1.0));
// Reflecting twice returns the point.
let p = Point3::new(0.3, -0.4, 5.0);
assert!((r.apply(r.apply(p)) - p).norm() < 1e-15);
assert!(Reflection::new(Point3::origin(), Vec3::zeros()).is_err());Implementations§
Source§impl Reflection
impl Reflection
Sourcepub fn new(origin: Point3, normal: Vec3) -> Result<Self, ReflectionError>
pub fn new(origin: Point3, normal: Vec3) -> Result<Self, ReflectionError>
The plane through origin with normal along normal (normalised).
Errors: a non-finite input, or a zero normal.
Sourcepub fn plane_through(
origin: Point3,
normal: Vec3,
) -> Result<Self, ReflectionError>
pub fn plane_through( origin: Point3, normal: Vec3, ) -> Result<Self, ReflectionError>
The same as Reflection::new: the plane is named by a point on
it and its normal.
Sourcepub fn apply_vec(&self, v: Vec3) -> Vec3
pub fn apply_vec(&self, v: Vec3) -> Vec3
The image of a displacement: the plane’s offset does not act on it.
Sourcepub fn apply_unit(&self, u: UnitVec3) -> UnitVec3
pub fn apply_unit(&self, u: UnitVec3) -> UnitVec3
The image of a direction, re-normalised so it is unit to rounding.
Sourcepub fn apply_frame(&self, frame: &Frame) -> Frame
pub fn apply_frame(&self, frame: &Frame) -> Frame
The image of a frame as a quadric is placed after a mirror:
O′ = R O, X′ = R X, Y′ = −R Y, Z′ = R Z. Right-handed by
construction (X′ × Y′ = R Z); the surface it places is the
mirror image reparametrised by u ↦ 2π − u (ADR-0031 §2).
use arris_math::{Frame, Reflection, Vec3, Point3};
let r = Reflection::new(Point3::origin(), Vec3::x()).unwrap();
let f = r.apply_frame(&Frame::world());
assert!((f.x().into_inner() - (-Vec3::x())).norm() < 1e-15);
assert!((f.y().into_inner() - (-Vec3::y())).norm() < 1e-15);
assert!((f.z().into_inner() - Vec3::z()).norm() < 1e-15);Sourcepub fn apply_frame_reversed(&self, frame: &Frame) -> Frame
pub fn apply_frame_reversed(&self, frame: &Frame) -> Frame
The image of a frame keeping the parametrisation of what it
places: O′ = R O, X′ = R X, Y′ = R Y, Z′ = X′ × Y′ = −R Z.
A plane’s and a conic curve’s frame after a mirror (ADR-0031 §2):
the same parameters, the normal turned the other way.
Trait Implementations§
Source§impl Clone for Reflection
impl Clone for Reflection
impl Copy for Reflection
Source§impl Debug for Reflection
impl Debug for Reflection
Source§impl PartialEq for Reflection
impl PartialEq for Reflection
impl StructuralPartialEq for Reflection
Auto Trait Implementations§
impl Freeze for Reflection
impl RefUnwindSafe for Reflection
impl Send for Reflection
impl Sync for Reflection
impl Unpin for Reflection
impl UnsafeUnpin for Reflection
impl UnwindSafe for Reflection
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> Scalar for T
Source§impl<SS, SP> SupersetOf<SS> for SPwhere
SS: SubsetOf<SP>,
impl<SS, SP> SupersetOf<SS> for SPwhere
SS: SubsetOf<SP>,
Source§fn to_subset(&self) -> Option<SS>
fn to_subset(&self) -> Option<SS>
self from the equivalent element of its
superset. Read moreSource§fn is_in_subset(&self) -> bool
fn is_in_subset(&self) -> bool
self is actually part of its subset T (and can be converted to it).Source§fn to_subset_unchecked(&self) -> SS
fn to_subset_unchecked(&self) -> SS
self.to_subset but without any property checks. Always succeeds.Source§fn from_subset(element: &SS) -> SP
fn from_subset(element: &SS) -> SP
self to the equivalent element of its superset.