# [−][src]Struct cgmath::Vector3

```#[repr(C)]
pub struct Vector3<S> {
pub x: S,
pub y: S,
pub z: S,
}```

A 3-dimensional vector.

This type is marked as `#[repr(C)]`.

## Fields

`x: S`

The x component of the vector.

`y: S`

The y component of the vector.

`z: S`

The z component of the vector.

## Methods

### `impl<S> Vector3<S>`[src]

#### `pub const fn new(x: S, y: S, z: S) -> Vector3<S>`[src]

Construct a new vector, using the provided values.

#### `pub fn map<U, F>(self, f: F) -> Vector3<U> where    F: FnMut(S) -> U, `[src]

Perform the given operation on each field in the vector, returning a new point constructed from the operations.

### `impl<S: NumCast + Copy> Vector3<S>`[src]

#### `pub fn cast<T: NumCast>(&self) -> Option<Vector3<T>>`[src]

Component-wise casting to another type.

### `impl<S: BaseNum> Vector3<S>`[src]

#### `pub fn unit_x() -> Vector3<S>`[src]

A unit vector in the `x` direction.

#### `pub fn unit_y() -> Vector3<S>`[src]

A unit vector in the `y` direction.

#### `pub fn unit_z() -> Vector3<S>`[src]

A unit vector in the `z` direction.

#### `pub fn cross(self, other: Vector3<S>) -> Vector3<S>`[src]

Returns the cross product of the vector and `other`.

#### `pub fn extend(self, w: S) -> Vector4<S>`[src]

Create a `Vector4`, using the `x`, `y` and `z` values from this vector, and the provided `w`.

#### `pub fn truncate(self) -> Vector2<S>`[src]

Create a `Vector2`, dropping the `z` value.

## Trait Implementations

### `impl<S: Copy> Array for Vector3<S>`[src]

#### `fn as_ptr(&self) -> *const Self::Element`[src]

Get the pointer to the first element of the array.

#### `fn as_mut_ptr(&mut self) -> *mut Self::Element`[src]

Get a mutable pointer to the first element of the array.

#### `fn swap_elements(&mut self, i: usize, j: usize)`[src]

Swap the elements at indices `i` and `j` in-place.

### `impl<S: BaseNum> VectorSpace for Vector3<S>`[src]

#### `type Scalar = S`

The associated scalar.

#### `fn lerp(self, other: Self, amount: Self::Scalar) -> Self`[src]

Returns the result of linearly interpolating the vector towards `other` by the specified amount. Read more

### `impl<S: BaseFloat> MetricSpace for Vector3<S>`[src]

#### `type Metric = S`

The metric to be returned by the `distance` function.

#### `fn distance(self, other: Self) -> Self::Metric`[src]

The distance between two values.

### `impl<S: BaseFloat> InnerSpace for Vector3<S>`[src]

#### `fn is_perpendicular(self, other: Self) -> bool`[src]

Returns `true` if the vector is perpendicular (at right angles) to the other vector. Read more

#### `fn magnitude2(self) -> Self::Scalar`[src]

Returns the squared magnitude. Read more

#### `fn magnitude(self) -> Self::Scalar`[src]

The distance from the tail to the tip of the vector.

#### `fn normalize(self) -> Self`[src]

Returns a vector with the same direction, but with a magnitude of `1`.

#### `fn normalize_to(self, magnitude: Self::Scalar) -> Self`[src]

Returns a vector with the same direction and a given magnitude.

#### `fn project_on(self, other: Self) -> Self`[src]

Returns the vector projection of the current inner space projected onto the supplied argument. Read more

### `impl<S: Clone> Clone for Vector3<S>`[src]

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

Performs copy-assignment from `source`. Read more

### `impl<S: Hash> Hash for Vector3<S>`[src]

#### `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<S: BaseNum> Add<Vector3<S>> for Vector3<S>`[src]

#### `type Output = Vector3<S>`

The resulting type after applying the `+` operator.

### `impl<'a, S: BaseNum> Add<&'a Vector3<S>> for Vector3<S>`[src]

#### `type Output = Vector3<S>`

The resulting type after applying the `+` operator.

### `impl<'a, S: BaseNum> Add<Vector3<S>> for &'a Vector3<S>`[src]

#### `type Output = Vector3<S>`

The resulting type after applying the `+` operator.

### `impl<'a, 'b, S: BaseNum> Add<&'a Vector3<S>> for &'b Vector3<S>`[src]

#### `type Output = Vector3<S>`

The resulting type after applying the `+` operator.

### `impl<S: BaseNum> Add<Vector3<S>> for Point3<S>`[src]

#### `type Output = Point3<S>`

The resulting type after applying the `+` operator.

### `impl<'a, S: BaseNum> Add<&'a Vector3<S>> for Point3<S>`[src]

#### `type Output = Point3<S>`

The resulting type after applying the `+` operator.

### `impl<'a, S: BaseNum> Add<Vector3<S>> for &'a Point3<S>`[src]

#### `type Output = Point3<S>`

The resulting type after applying the `+` operator.

### `impl<'a, 'b, S: BaseNum> Add<&'a Vector3<S>> for &'b Point3<S>`[src]

#### `type Output = Point3<S>`

The resulting type after applying the `+` operator.

### `impl<S: BaseNum> Sub<Vector3<S>> for Vector3<S>`[src]

#### `type Output = Vector3<S>`

The resulting type after applying the `-` operator.

### `impl<'a, S: BaseNum> Sub<&'a Vector3<S>> for Vector3<S>`[src]

#### `type Output = Vector3<S>`

The resulting type after applying the `-` operator.

### `impl<'a, S: BaseNum> Sub<Vector3<S>> for &'a Vector3<S>`[src]

#### `type Output = Vector3<S>`

The resulting type after applying the `-` operator.

### `impl<'a, 'b, S: BaseNum> Sub<&'a Vector3<S>> for &'b Vector3<S>`[src]

#### `type Output = Vector3<S>`

The resulting type after applying the `-` operator.

### `impl<S: BaseNum> Sub<Vector3<S>> for Point3<S>`[src]

#### `type Output = Point3<S>`

The resulting type after applying the `-` operator.

### `impl<'a, S: BaseNum> Sub<&'a Vector3<S>> for Point3<S>`[src]

#### `type Output = Point3<S>`

The resulting type after applying the `-` operator.

### `impl<'a, S: BaseNum> Sub<Vector3<S>> for &'a Point3<S>`[src]

#### `type Output = Point3<S>`

The resulting type after applying the `-` operator.

### `impl<'a, 'b, S: BaseNum> Sub<&'a Vector3<S>> for &'b Point3<S>`[src]

#### `type Output = Point3<S>`

The resulting type after applying the `-` operator.

### `impl<S: BaseFloat> Mul<Vector3<S>> for Matrix3<S>`[src]

#### `type Output = Vector3<S>`

The resulting type after applying the `*` operator.

### `impl<'a, S: BaseFloat> Mul<&'a Vector3<S>> for Matrix3<S>`[src]

#### `type Output = Vector3<S>`

The resulting type after applying the `*` operator.

### `impl<'a, S: BaseFloat> Mul<Vector3<S>> for &'a Matrix3<S>`[src]

#### `type Output = Vector3<S>`

The resulting type after applying the `*` operator.

### `impl<'a, 'b, S: BaseFloat> Mul<&'a Vector3<S>> for &'b Matrix3<S>`[src]

#### `type Output = Vector3<S>`

The resulting type after applying the `*` operator.

### `impl<S: BaseFloat> Mul<Vector3<S>> for Quaternion<S>`[src]

#### `type Output = Vector3<S>`

The resulting type after applying the `*` operator.

### `impl<'a, S: BaseFloat> Mul<&'a Vector3<S>> for Quaternion<S>`[src]

#### `type Output = Vector3<S>`

The resulting type after applying the `*` operator.

### `impl<'a, S: BaseFloat> Mul<Vector3<S>> for &'a Quaternion<S>`[src]

#### `type Output = Vector3<S>`

The resulting type after applying the `*` operator.

### `impl<'a, 'b, S: BaseFloat> Mul<&'a Vector3<S>> for &'b Quaternion<S>`[src]

#### `type Output = Vector3<S>`

The resulting type after applying the `*` operator.

### `impl<S: BaseNum> Mul<S> for Vector3<S>`[src]

#### `type Output = Vector3<S>`

The resulting type after applying the `*` operator.

### `impl<'a, S: BaseNum> Mul<S> for &'a Vector3<S>`[src]

#### `type Output = Vector3<S>`

The resulting type after applying the `*` operator.

### `impl Mul<Vector3<usize>> for usize`[src]

#### `type Output = Vector3<usize>`

The resulting type after applying the `*` operator.

### `impl<'a> Mul<&'a Vector3<usize>> for usize`[src]

#### `type Output = Vector3<usize>`

The resulting type after applying the `*` operator.

### `impl Mul<Vector3<u8>> for u8`[src]

#### `type Output = Vector3<u8>`

The resulting type after applying the `*` operator.

### `impl<'a> Mul<&'a Vector3<u8>> for u8`[src]

#### `type Output = Vector3<u8>`

The resulting type after applying the `*` operator.

### `impl Mul<Vector3<u16>> for u16`[src]

#### `type Output = Vector3<u16>`

The resulting type after applying the `*` operator.

### `impl<'a> Mul<&'a Vector3<u16>> for u16`[src]

#### `type Output = Vector3<u16>`

The resulting type after applying the `*` operator.

### `impl Mul<Vector3<u32>> for u32`[src]

#### `type Output = Vector3<u32>`

The resulting type after applying the `*` operator.

### `impl<'a> Mul<&'a Vector3<u32>> for u32`[src]

#### `type Output = Vector3<u32>`

The resulting type after applying the `*` operator.

### `impl Mul<Vector3<u64>> for u64`[src]

#### `type Output = Vector3<u64>`

The resulting type after applying the `*` operator.

### `impl<'a> Mul<&'a Vector3<u64>> for u64`[src]

#### `type Output = Vector3<u64>`

The resulting type after applying the `*` operator.

### `impl Mul<Vector3<isize>> for isize`[src]

#### `type Output = Vector3<isize>`

The resulting type after applying the `*` operator.

### `impl<'a> Mul<&'a Vector3<isize>> for isize`[src]

#### `type Output = Vector3<isize>`

The resulting type after applying the `*` operator.

### `impl Mul<Vector3<i8>> for i8`[src]

#### `type Output = Vector3<i8>`

The resulting type after applying the `*` operator.

### `impl<'a> Mul<&'a Vector3<i8>> for i8`[src]

#### `type Output = Vector3<i8>`

The resulting type after applying the `*` operator.

### `impl Mul<Vector3<i16>> for i16`[src]

#### `type Output = Vector3<i16>`

The resulting type after applying the `*` operator.

### `impl<'a> Mul<&'a Vector3<i16>> for i16`[src]

#### `type Output = Vector3<i16>`

The resulting type after applying the `*` operator.

### `impl Mul<Vector3<i32>> for i32`[src]

#### `type Output = Vector3<i32>`

The resulting type after applying the `*` operator.

### `impl<'a> Mul<&'a Vector3<i32>> for i32`[src]

#### `type Output = Vector3<i32>`

The resulting type after applying the `*` operator.

### `impl Mul<Vector3<i64>> for i64`[src]

#### `type Output = Vector3<i64>`

The resulting type after applying the `*` operator.

### `impl<'a> Mul<&'a Vector3<i64>> for i64`[src]

#### `type Output = Vector3<i64>`

The resulting type after applying the `*` operator.

### `impl Mul<Vector3<f32>> for f32`[src]

#### `type Output = Vector3<f32>`

The resulting type after applying the `*` operator.

### `impl<'a> Mul<&'a Vector3<f32>> for f32`[src]

#### `type Output = Vector3<f32>`

The resulting type after applying the `*` operator.

### `impl Mul<Vector3<f64>> for f64`[src]

#### `type Output = Vector3<f64>`

The resulting type after applying the `*` operator.

### `impl<'a> Mul<&'a Vector3<f64>> for f64`[src]

#### `type Output = Vector3<f64>`

The resulting type after applying the `*` operator.

### `impl<S: BaseNum> Div<S> for Vector3<S>`[src]

#### `type Output = Vector3<S>`

The resulting type after applying the `/` operator.

### `impl<'a, S: BaseNum> Div<S> for &'a Vector3<S>`[src]

#### `type Output = Vector3<S>`

The resulting type after applying the `/` operator.

### `impl Div<Vector3<usize>> for usize`[src]

#### `type Output = Vector3<usize>`

The resulting type after applying the `/` operator.

### `impl<'a> Div<&'a Vector3<usize>> for usize`[src]

#### `type Output = Vector3<usize>`

The resulting type after applying the `/` operator.

### `impl Div<Vector3<u8>> for u8`[src]

#### `type Output = Vector3<u8>`

The resulting type after applying the `/` operator.

### `impl<'a> Div<&'a Vector3<u8>> for u8`[src]

#### `type Output = Vector3<u8>`

The resulting type after applying the `/` operator.

### `impl Div<Vector3<u16>> for u16`[src]

#### `type Output = Vector3<u16>`

The resulting type after applying the `/` operator.

### `impl<'a> Div<&'a Vector3<u16>> for u16`[src]

#### `type Output = Vector3<u16>`

The resulting type after applying the `/` operator.

### `impl Div<Vector3<u32>> for u32`[src]

#### `type Output = Vector3<u32>`

The resulting type after applying the `/` operator.

### `impl<'a> Div<&'a Vector3<u32>> for u32`[src]

#### `type Output = Vector3<u32>`

The resulting type after applying the `/` operator.

### `impl Div<Vector3<u64>> for u64`[src]

#### `type Output = Vector3<u64>`

The resulting type after applying the `/` operator.

### `impl<'a> Div<&'a Vector3<u64>> for u64`[src]

#### `type Output = Vector3<u64>`

The resulting type after applying the `/` operator.

### `impl Div<Vector3<isize>> for isize`[src]

#### `type Output = Vector3<isize>`

The resulting type after applying the `/` operator.

### `impl<'a> Div<&'a Vector3<isize>> for isize`[src]

#### `type Output = Vector3<isize>`

The resulting type after applying the `/` operator.

### `impl Div<Vector3<i8>> for i8`[src]

#### `type Output = Vector3<i8>`

The resulting type after applying the `/` operator.

### `impl<'a> Div<&'a Vector3<i8>> for i8`[src]

#### `type Output = Vector3<i8>`

The resulting type after applying the `/` operator.

### `impl Div<Vector3<i16>> for i16`[src]

#### `type Output = Vector3<i16>`

The resulting type after applying the `/` operator.

### `impl<'a> Div<&'a Vector3<i16>> for i16`[src]

#### `type Output = Vector3<i16>`

The resulting type after applying the `/` operator.

### `impl Div<Vector3<i32>> for i32`[src]

#### `type Output = Vector3<i32>`

The resulting type after applying the `/` operator.

### `impl<'a> Div<&'a Vector3<i32>> for i32`[src]

#### `type Output = Vector3<i32>`

The resulting type after applying the `/` operator.

### `impl Div<Vector3<i64>> for i64`[src]

#### `type Output = Vector3<i64>`

The resulting type after applying the `/` operator.

### `impl<'a> Div<&'a Vector3<i64>> for i64`[src]

#### `type Output = Vector3<i64>`

The resulting type after applying the `/` operator.

### `impl Div<Vector3<f32>> for f32`[src]

#### `type Output = Vector3<f32>`

The resulting type after applying the `/` operator.

### `impl<'a> Div<&'a Vector3<f32>> for f32`[src]

#### `type Output = Vector3<f32>`

The resulting type after applying the `/` operator.

### `impl Div<Vector3<f64>> for f64`[src]

#### `type Output = Vector3<f64>`

The resulting type after applying the `/` operator.

### `impl<'a> Div<&'a Vector3<f64>> for f64`[src]

#### `type Output = Vector3<f64>`

The resulting type after applying the `/` operator.

### `impl<S: BaseNum> Rem<S> for Vector3<S>`[src]

#### `type Output = Vector3<S>`

The resulting type after applying the `%` operator.

### `impl<'a, S: BaseNum> Rem<S> for &'a Vector3<S>`[src]

#### `type Output = Vector3<S>`

The resulting type after applying the `%` operator.

### `impl Rem<Vector3<usize>> for usize`[src]

#### `type Output = Vector3<usize>`

The resulting type after applying the `%` operator.

### `impl<'a> Rem<&'a Vector3<usize>> for usize`[src]

#### `type Output = Vector3<usize>`

The resulting type after applying the `%` operator.

### `impl Rem<Vector3<u8>> for u8`[src]

#### `type Output = Vector3<u8>`

The resulting type after applying the `%` operator.

### `impl<'a> Rem<&'a Vector3<u8>> for u8`[src]

#### `type Output = Vector3<u8>`

The resulting type after applying the `%` operator.

### `impl Rem<Vector3<u16>> for u16`[src]

#### `type Output = Vector3<u16>`

The resulting type after applying the `%` operator.

### `impl<'a> Rem<&'a Vector3<u16>> for u16`[src]

#### `type Output = Vector3<u16>`

The resulting type after applying the `%` operator.

### `impl Rem<Vector3<u32>> for u32`[src]

#### `type Output = Vector3<u32>`

The resulting type after applying the `%` operator.

### `impl<'a> Rem<&'a Vector3<u32>> for u32`[src]

#### `type Output = Vector3<u32>`

The resulting type after applying the `%` operator.

### `impl Rem<Vector3<u64>> for u64`[src]

#### `type Output = Vector3<u64>`

The resulting type after applying the `%` operator.

### `impl<'a> Rem<&'a Vector3<u64>> for u64`[src]

#### `type Output = Vector3<u64>`

The resulting type after applying the `%` operator.

### `impl Rem<Vector3<isize>> for isize`[src]

#### `type Output = Vector3<isize>`

The resulting type after applying the `%` operator.

### `impl<'a> Rem<&'a Vector3<isize>> for isize`[src]

#### `type Output = Vector3<isize>`

The resulting type after applying the `%` operator.

### `impl Rem<Vector3<i8>> for i8`[src]

#### `type Output = Vector3<i8>`

The resulting type after applying the `%` operator.

### `impl<'a> Rem<&'a Vector3<i8>> for i8`[src]

#### `type Output = Vector3<i8>`

The resulting type after applying the `%` operator.

### `impl Rem<Vector3<i16>> for i16`[src]

#### `type Output = Vector3<i16>`

The resulting type after applying the `%` operator.

### `impl<'a> Rem<&'a Vector3<i16>> for i16`[src]

#### `type Output = Vector3<i16>`

The resulting type after applying the `%` operator.

### `impl Rem<Vector3<i32>> for i32`[src]

#### `type Output = Vector3<i32>`

The resulting type after applying the `%` operator.

### `impl<'a> Rem<&'a Vector3<i32>> for i32`[src]

#### `type Output = Vector3<i32>`

The resulting type after applying the `%` operator.

### `impl Rem<Vector3<i64>> for i64`[src]

#### `type Output = Vector3<i64>`

The resulting type after applying the `%` operator.

### `impl<'a> Rem<&'a Vector3<i64>> for i64`[src]

#### `type Output = Vector3<i64>`

The resulting type after applying the `%` operator.

### `impl Rem<Vector3<f32>> for f32`[src]

#### `type Output = Vector3<f32>`

The resulting type after applying the `%` operator.

### `impl<'a> Rem<&'a Vector3<f32>> for f32`[src]

#### `type Output = Vector3<f32>`

The resulting type after applying the `%` operator.

### `impl Rem<Vector3<f64>> for f64`[src]

#### `type Output = Vector3<f64>`

The resulting type after applying the `%` operator.

### `impl<'a> Rem<&'a Vector3<f64>> for f64`[src]

#### `type Output = Vector3<f64>`

The resulting type after applying the `%` operator.

### `impl<S: Neg<Output = S>> Neg for Vector3<S>`[src]

#### `type Output = Vector3<S>`

The resulting type after applying the `-` operator.

### `impl<S> Index<usize> for Vector3<S>`[src]

#### `type Output = S`

The returned type after indexing.

### `impl<S> Index<Range<usize>> for Vector3<S>`[src]

#### `type Output = [S]`

The returned type after indexing.

### `impl<S> Index<RangeTo<usize>> for Vector3<S>`[src]

#### `type Output = [S]`

The returned type after indexing.

### `impl<S> Index<RangeFrom<usize>> for Vector3<S>`[src]

#### `type Output = [S]`

The returned type after indexing.

### `impl<S> Index<RangeFull> for Vector3<S>`[src]

#### `type Output = [S]`

The returned type after indexing.

### `impl<S: BaseFloat> AbsDiffEq for Vector3<S>`[src]

#### `type Epsilon = S::Epsilon`

Used for specifying relative comparisons.

#### `fn abs_diff_ne(&self, other: &Self, epsilon: Self::Epsilon) -> bool`[src]

The inverse of `ApproxEq::abs_diff_eq`.

### `impl<S: BaseFloat> RelativeEq for Vector3<S>`[src]

#### `fn relative_ne(    &self,     other: &Self,     epsilon: Self::Epsilon,     max_relative: Self::Epsilon) -> bool`[src]

The inverse of `ApproxEq::relative_eq`.

### `impl<S: BaseFloat> UlpsEq for Vector3<S>`[src]

#### `fn ulps_ne(&self, other: &Self, epsilon: Self::Epsilon, max_ulps: u32) -> bool`[src]

The inverse of `ApproxEq::ulps_eq`.

### `impl<S> Distribution<Vector3<S>> for Standard where    Standard: Distribution<S>,    S: BaseFloat, `[src]

#### `fn sample_iter<R>(&'a self, rng: &'a mut R) -> DistIter<'a, Self, R, T> where    R: Rng, `[src]

Create an iterator that generates random values of `T`, using `rng` as the source of randomness. Read more

## Blanket Implementations

### `impl<T, U> TryFrom for T where    T: From<U>, `[src]

#### `type Error = !`

🔬 This is a nightly-only experimental API. (`try_from`)

The type returned in the event of a conversion error.

### `impl<T, U> TryInto for T where    U: TryFrom<T>, `[src]

#### `type Error = <U as TryFrom<T>>::Error`

🔬 This is a nightly-only experimental API. (`try_from`)

The type returned in the event of a conversion error.