#[repr(C)]pub struct Mat3<F> {
pub x: Vec3<F>,
pub y: Vec3<F>,
pub z: Vec3<F>,
}
Expand description
A 3x3 matrix
This matrix is internally stored column-major (as that is better for GPU compatibility and possibly other reasons), but the API (e.g. the order of function parameters to the new() function) is row-major, since that is how people write matrices on paper.
Fields§
§x: Vec3<F>
§y: Vec3<F>
§z: Vec3<F>
Implementations§
Source§impl<F: FullFloat> Mat3<F>
impl<F: FullFloat> Mat3<F>
pub fn from_angle_x(theta: Angle<F>) -> Mat3<F>
pub fn from_angle_y(theta: Angle<F>) -> Mat3<F>
pub fn from_angle_z(theta: Angle<F>) -> Mat3<F>
Source§impl<F: FullFloat> Mat3<F>
impl<F: FullFloat> Mat3<F>
pub fn rotate_axis_angle(axis: Direction3<F>, theta: Angle<F>) -> Mat3<F>
Source§impl<F: FullFloat> Mat3<F>
impl<F: FullFloat> Mat3<F>
Sourcepub fn reflect_origin_plane(a: Direction3<F>) -> Mat3<F>
pub fn reflect_origin_plane(a: Direction3<F>) -> Mat3<F>
Reflection matrix
Source§impl<F: FullFloat> Mat3<F>
impl<F: FullFloat> Mat3<F>
Sourcepub fn involve_origin_plane(a: Direction3<F>) -> Mat3<F>
pub fn involve_origin_plane(a: Direction3<F>) -> Mat3<F>
Involution matrix
Source§impl<F: FullFloat> Mat3<F>
impl<F: FullFloat> Mat3<F>
Sourcepub fn scale_in_direction(s: F, a: Direction3<F>) -> Mat3<F>
pub fn scale_in_direction(s: F, a: Direction3<F>) -> Mat3<F>
Scale along vector
Source§impl<F: FullFloat> Mat3<F>
impl<F: FullFloat> Mat3<F>
Sourcepub fn skew(angle: Angle<F>, a: Direction3<F>, proj: Direction3<F>) -> Mat3<F>
pub fn skew(angle: Angle<F>, a: Direction3<F>, proj: Direction3<F>) -> Mat3<F>
Skew by give given angle in the given direction a, based on the projected length along the proj direction. direction and proj MUST BE PERPENDICULAR or else results are undefined.
Trait Implementations§
Source§impl<F: FullFloat> ApproxEq for Mat3<F>
impl<F: FullFloat> ApproxEq for Mat3<F>
type Flt = F
Source§fn approx_eq(
&self,
other: &Self,
epsilon: <F as ApproxEq>::Flt,
ulps: <<F as ApproxEq>::Flt as Ulps>::U,
) -> bool
fn approx_eq( &self, other: &Self, epsilon: <F as ApproxEq>::Flt, ulps: <<F as ApproxEq>::Flt as Ulps>::U, ) -> bool
This method tests for
self
and other
values to be approximately equal
using two methods: epsilon and ulps. If the values differ by less than the
given epsilon, they will be considered equal. If the values differ by more
than epsilon, but by less than the given ulps, they will also be considered
equal. Otherwise they are unequal. Read moreSource§fn approx_ne(
&self,
other: &Self,
epsilon: Self::Flt,
ulps: <Self::Flt as Ulps>::U,
) -> bool
fn approx_ne( &self, other: &Self, epsilon: Self::Flt, ulps: <Self::Flt as Ulps>::U, ) -> bool
This method tests for
self
and other
values to be not approximately equal
using two methods: epsilon and ulps. If the values differ by less than the
given epsilon, they will be considered equal. If the values differ by more
than epsilon, but by less than the given ulps, they will also be considered
equal. Otherwise they are unequal. Read moreSource§impl<'de, F> Deserialize<'de> for Mat3<F>where
F: Deserialize<'de>,
impl<'de, F> Deserialize<'de> for Mat3<F>where
F: Deserialize<'de>,
Source§fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
Deserialize this value from the given Serde deserializer. Read more
impl<F: Copy> Copy for Mat3<F>
impl<F: Eq> Eq for Mat3<F>
impl<F> StructuralPartialEq for Mat3<F>
Auto Trait Implementations§
impl<F> Freeze for Mat3<F>where
F: Freeze,
impl<F> RefUnwindSafe for Mat3<F>where
F: RefUnwindSafe,
impl<F> Send for Mat3<F>where
F: Send,
impl<F> Sync for Mat3<F>where
F: Sync,
impl<F> Unpin for Mat3<F>where
F: Unpin,
impl<F> UnwindSafe for Mat3<F>where
F: UnwindSafe,
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
Mutably borrows from an owned value. Read more