# Trait cgmath::Rotation [−] [src]

```pub trait Rotation<P: EuclideanSpace>: Sized + Copy + One where Self: ApproxEq<Epsilon=P::Scalar>, P::Scalar: BaseFloat {
fn look_at(dir: P::Diff, up: P::Diff) -> Self;
fn between_vectors(a: P::Diff, b: P::Diff) -> Self;
fn rotate_vector(&self, vec: P::Diff) -> P::Diff;
fn invert(&self) -> Self;

fn rotate_point(&self, point: P) -> P { ... }
}```

A trait for a generic rotation. A rotation is a transformation that creates a circular motion, and preserves at least one point in the space.

## Required Methods

### `fn look_at(dir: P::Diff, up: P::Diff) -> Self`

Create a rotation to a given direction with an 'up' vector

### `fn between_vectors(a: P::Diff, b: P::Diff) -> Self`

Create a shortest rotation to transform vector 'a' into 'b'. Both given vectors are assumed to have unit length.

### `fn rotate_vector(&self, vec: P::Diff) -> P::Diff`

Rotate a vector using this rotation.

### `fn invert(&self) -> Self`

Create a new rotation which "un-does" this rotation. That is, `r * r.invert()` is the identity.

## Provided Methods

### `fn rotate_point(&self, point: P) -> P`

Rotate a point using this rotation, by converting it to its representation as a vector.

## Implementors

• `impl<S: BaseFloat> Rotation<Point3<S>> for Quaternion<S>`
• `impl<S: BaseFloat> Rotation<Point2<S>> for Basis2<S>`
• `impl<S: BaseFloat> Rotation<Point3<S>> for Basis3<S>`