pub trait Skew {
    // Required methods
    fn skew(&self, degrees: BroadcastablePrimitive<Float64Type>) -> Self;
    fn skew_xy(
        &self,
        degrees_x: BroadcastablePrimitive<Float64Type>,
        degrees_y: BroadcastablePrimitive<Float64Type>
    ) -> Self;
    fn skew_around_point(
        &self,
        degrees_x: BroadcastablePrimitive<Float64Type>,
        degrees_y: BroadcastablePrimitive<Float64Type>,
        origin: Point
    ) -> Self;
}
Expand description

An affine transformation which skews a geometry, sheared by angles along x and y dimensions.

Performance

If you will be performing multiple transformations, like Scale, Skew, Translate, or Rotate, it is more efficient to compose the transformations and apply them as a single operation using the AffineOps trait.

Required Methods§

source

fn skew(&self, degrees: BroadcastablePrimitive<Float64Type>) -> Self

An affine transformation which skews a geometry, sheared by a uniform angle along the x and y dimensions.

Examples
use geo::Skew;
use geo::{Polygon, polygon};

let square: Polygon = polygon![
    (x: 0., y: 0.),
    (x: 10., y: 0.),
    (x: 10., y: 10.),
    (x: 0., y: 10.)
];

let skewed = square.skew(30.);

let expected_output: Polygon = polygon![
    (x: -2.89, y: -2.89),
    (x: 7.11, y: 2.89),
    (x: 12.89, y: 12.89),
    (x: 2.89, y: 7.11)
];
approx::assert_relative_eq!(skewed, expected_output, epsilon = 1e-2);
source

fn skew_xy( &self, degrees_x: BroadcastablePrimitive<Float64Type>, degrees_y: BroadcastablePrimitive<Float64Type> ) -> Self

An affine transformation which skews a geometry, sheared by an angle along the x and y dimensions.

Examples
use geo::Skew;
use geo::{Polygon, polygon};

let square: Polygon = polygon![
    (x: 0., y: 0.),
    (x: 10., y: 0.),
    (x: 10., y: 10.),
    (x: 0., y: 10.)
];

let skewed = square.skew_xy(30., 12.);

let expected_output: Polygon = polygon![
    (x: -2.89, y: -1.06),
    (x: 7.11, y: 1.06),
    (x: 12.89, y: 11.06),
    (x: 2.89, y: 8.94)
];
approx::assert_relative_eq!(skewed, expected_output, epsilon = 1e-2);
source

fn skew_around_point( &self, degrees_x: BroadcastablePrimitive<Float64Type>, degrees_y: BroadcastablePrimitive<Float64Type>, origin: Point ) -> Self

An affine transformation which skews a geometry around a point of origin, sheared by an angle along the x and y dimensions.

The point of origin is usually given as the 2D bounding box centre of the geometry, in which case you can just use skew or skew_xy, but this method allows you to specify any point.

Examples
use geo::Skew;
use geo::{Polygon, polygon, point};

let square: Polygon = polygon![
    (x: 0., y: 0.),
    (x: 10., y: 0.),
    (x: 10., y: 10.),
    (x: 0., y: 10.)
];

let origin = point! { x: 2., y: 2. };
let skewed = square.skew_around_point(45.0, 10.0, origin);

let expected_output: Polygon = polygon![
    (x: -2., y: -0.353),
    (x: 8., y: 1.410),
    (x: 18., y: 11.41),
    (x: 8., y: 9.647)
];
approx::assert_relative_eq!(skewed, expected_output, epsilon = 1e-2);

Object Safety§

This trait is not object safe.

Implementors§