# [−][src]Trait alga::linear::Rotation

```pub trait Rotation<E: EuclideanSpace>: OrthogonalTransformation<E, Rotation = Self> + DirectIsometry<E, Rotation = Self> {
fn powf(&self, n: E::RealField) -> Option<Self>;
fn rotation_between(a: &E::Coordinates, b: &E::Coordinates) -> Option<Self>;
fn scaled_rotation_between(        a: &E::Coordinates,         b: &E::Coordinates,         s: E::RealField    ) -> Option<Self>;
}```

Subgroups of the n-dimensional rotation group `SO(n)`.

## Required methods

### `fn powf(&self, n: E::RealField) -> Option<Self>`

Raises this rotation to a power. If this is a simple rotation, the result must be equivalent to multiplying the rotation angle by `n`.

### `fn rotation_between(a: &E::Coordinates, b: &E::Coordinates) -> Option<Self>`

Computes a simple rotation that makes the angle between `a` and `b` equal to zero, i.e., `b.angle(a * delta_rotation(a, b)) = 0`. If `a` and `b` are collinear, the computed rotation may not be unique. Returns `None` if no such simple rotation exists in the subgroup represented by `Self`.

### `fn scaled_rotation_between(    a: &E::Coordinates,     b: &E::Coordinates,     s: E::RealField) -> Option<Self>`

Computes the rotation between `a` and `b` and raises it to the power `n`.

This is equivalent to calling `self.rotation_between(a, b)` followed by `.powf(n)` but will usually be much more efficient.