# Struct siege_math::matrix::Mat3 [−] [src]

```#[repr(C)]
pub struct Mat3<F> {
pub x: Vec3<F>,
pub y: Vec3<F>,
pub z: Vec3<F>,
}```

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.

## Methods

### `impl<F: FullFloat> Mat3<F>`[src]

#### `pub fn new(    r0c0: F,     r0c1: F,     r0c2: F,     r1c0: F,     r1c1: F,     r1c2: F,     r2c0: F,     r2c1: F,     r2c2: F) -> Mat3<F>`[src]

Create a new 3x3 Matrix. Specify parameters in row-major order (as typically written on paper and in math texts)

### `impl<F: FullFloat> Mat3<F>`[src]

#### `pub fn reflect_origin_plane(a: Direction3<F>) -> Mat3<F>`[src]

Reflection matrix

### `impl<F: FullFloat> Mat3<F>`[src]

#### `pub fn involve_origin_plane(a: Direction3<F>) -> Mat3<F>`[src]

Involution matrix

Scale matrix

### `impl<F: FullFloat> Mat3<F>`[src]

#### `pub fn scale_in_direction(s: F, a: Direction3<F>) -> Mat3<F>`[src]

Scale along vector

### `impl<F: FullFloat> Mat3<F>`[src]

#### `pub fn skew(angle: Angle<F>, a: Direction3<F>, proj: Direction3<F>) -> Mat3<F>`[src]

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

### `impl<F: Debug> Debug for Mat3<F>`[src]

#### `fn fmt(&self, __arg_0: &mut Formatter) -> Result`[src]

Formats the value using the given formatter. Read more

### `impl<F: Clone> Clone for Mat3<F>`[src]

#### `fn clone(&self) -> Mat3<F>`[src]

Returns a copy of the value. Read more

#### `fn clone_from(&mut self, source: &Self)`1.0.0[src]

Performs copy-assignment from `source`. Read more

### `impl<F: PartialEq> PartialEq for Mat3<F>`[src]

#### `fn eq(&self, __arg_0: &Mat3<F>) -> bool`[src]

This method tests for `self` and `other` values to be equal, and is used by `==`. Read more

#### `fn ne(&self, __arg_0: &Mat3<F>) -> bool`[src]

This method tests for `!=`.

### `impl<F: Hash> Hash for Mat3<F>`[src]

#### `fn hash<__HF: Hasher>(&self, __arg_0: &mut __HF)`[src]

Feeds this value into the given [`Hasher`]. Read more

#### `fn hash_slice<H>(data: &[Self], state: &mut H) where    H: Hasher, `1.3.0[src]

Feeds a slice of this type into the given [`Hasher`]. Read more

### `impl<F: FullFloat> Index<(usize, usize)> for Mat3<F>`[src]

#### `type Output = F`

The returned type after indexing.

#### `fn index(&self, (row, col): (usize, usize)) -> &F`[src]

Performs the indexing (`container[index]`) operation.

### `impl<F: FullFloat> IndexMut<(usize, usize)> for Mat3<F>`[src]

#### `fn index_mut(&mut self, (row, col): (usize, usize)) -> &mut F`[src]

Performs the mutable indexing (`container[index]`) operation.

### `impl<F: FullFloat> Default for Mat3<F>`[src]

#### `fn default() -> Mat3<F>`[src]

Returns the "default value" for a type. Read more

### `impl<'a, 'b, F: FullFloat> Add<&'b Mat3<F>> for &'a Mat3<F>`[src]

#### `type Output = Mat3<F>`

The resulting type after applying the `+` operator.

#### `fn add(self, rhs: &Mat3<F>) -> Mat3<F>`[src]

Performs the `+` operation.

### `impl<'a, F: FullFloat> Mul<F> for &'a Mat3<F>`[src]

#### `type Output = Mat3<F>`

The resulting type after applying the `*` operator.

#### `fn mul(self, rhs: F) -> Mat3<F>`[src]

Performs the `*` operation.

### `impl<'a, 'b, F: FullFloat> Mul<&'b Mat3<F>> for &'a Mat3<F>`[src]

#### `type Output = Mat3<F>`

The resulting type after applying the `*` operator.

#### `fn mul(self, rhs: &Mat3<F>) -> Mat3<F>`[src]

Performs the `*` operation.

### `impl<'a, 'b, F: FullFloat> Mul<&'a Vec3<F>> for &'b Mat3<F>`[src]

#### `type Output = Vec3<F>`

The resulting type after applying the `*` operator.

#### `fn mul(self, rhs: &Vec3<F>) -> Vec3<F>`[src]

Performs the `*` operation.

### `impl<'a, 'b, F: FullFloat> Mul<&'a Mat3<F>> for &'a Vec3<F>`[src]

#### `type Output = Vec3<F>`

The resulting type after applying the `*` operator.

#### `fn mul(self, rhs: &Mat3<F>) -> Vec3<F>`[src]

Performs the `*` operation.

### `impl From<Mat3<f32>> for Mat3<f64>`[src]

#### `fn from(m: Mat3<f32>) -> Mat3<f64>`[src]

Performs the conversion.

### `impl From<Mat3<f64>> for Mat3<f32>`[src]

#### `fn from(m: Mat3<f64>) -> Mat3<f32>`[src]

Performs the conversion.

### `impl<F: FullFloat> ApproxEq for Mat3<F>`[src]

#### `fn approx_eq(    &self,     other: &Self,     epsilon: <F as ApproxEq>::Flt,     ulps: <<F as ApproxEq>::Flt as Ulps>::U) -> bool`[src]

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 more

#### `fn approx_ne(    &self,     other: &Self,     epsilon: Self::Flt,     ulps: <Self::Flt as Ulps>::U) -> bool`[src]

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 more

### `impl<F: FullFloat> From<NQuat<F>> for Mat3<F>`[src]

#### `fn from(q: NQuat<F>) -> Mat3<F>`[src]

Performs the conversion.

### `impl<F: FullFloat> From<Mat3<F>> for NQuat<F>`[src]

#### `fn from(m: Mat3<F>) -> NQuat<F>`[src]

Performs the conversion.