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

```pub trait Similarity<E: EuclideanSpace>: AffineTransformation<E, NonUniformScaling = Self::Scaling> {
type Scaling: Scaling<E>;
fn translation(&self) -> Self::Translation;
fn rotation(&self) -> Self::Rotation;
fn scaling(&self) -> Self::Scaling;

fn translate_point(&self, pt: &E) -> E { ... }
fn rotate_point(&self, pt: &E) -> E { ... }
fn scale_point(&self, pt: &E) -> E { ... }
fn rotate_vector(&self, pt: &E::Coordinates) -> E::Coordinates { ... }
fn scale_vector(&self, pt: &E::Coordinates) -> E::Coordinates { ... }
fn inverse_translate_point(&self, pt: &E) -> E { ... }
fn inverse_rotate_point(&self, pt: &E) -> E { ... }
fn inverse_scale_point(&self, pt: &E) -> E { ... }
fn inverse_rotate_vector(&self, pt: &E::Coordinates) -> E::Coordinates { ... }
fn inverse_scale_vector(&self, pt: &E::Coordinates) -> E::Coordinates { ... }
}```

Subgroups of the similarity group `S(n)`, i.e., rotations, translations, and (signed) uniform scaling.

Similarities map lines to lines and preserve angles.

## Associated Types

### `type Scaling: Scaling<E>`

The type of the pure (uniform) scaling part of this similarity transformation.

## Required methods

### `fn translation(&self) -> Self::Translation`

The pure translational component of this similarity transformation.

### `fn rotation(&self) -> Self::Rotation`

The pure rotational component of this similarity transformation.

### `fn scaling(&self) -> Self::Scaling`

The pure scaling component of this similarity transformation.

## Provided methods

### `fn translate_point(&self, pt: &E) -> E`

Applies this transformation's pure translational part to a point.

### `fn rotate_point(&self, pt: &E) -> E`

Applies this transformation's pure rotational part to a point.

### `fn scale_point(&self, pt: &E) -> E`

Applies this transformation's pure scaling part to a point.

### `fn rotate_vector(&self, pt: &E::Coordinates) -> E::Coordinates`

Applies this transformation's pure rotational part to a vector.

### `fn scale_vector(&self, pt: &E::Coordinates) -> E::Coordinates`

Applies this transformation's pure scaling part to a vector.

### `fn inverse_translate_point(&self, pt: &E) -> E`

Applies this transformation inverse's pure translational part to a point.

### `fn inverse_rotate_point(&self, pt: &E) -> E`

Applies this transformation inverse's pure rotational part to a point.

### `fn inverse_scale_point(&self, pt: &E) -> E`

Applies this transformation inverse's pure scaling part to a point.

### `fn inverse_rotate_vector(&self, pt: &E::Coordinates) -> E::Coordinates`

Applies this transformation inverse's pure rotational part to a vector.

### `fn inverse_scale_vector(&self, pt: &E::Coordinates) -> E::Coordinates`

Applies this transformation inverse's pure scaling part to a vector.