// Ported from georust/geo
// https://github.com/georust/geo/blob/main/geo/src/algorithm/rotate.rs
///|
/// Rotate a geometry around `pivot` by `degrees` (CCW positive).
pub fn rotate_geometry_around(
g : @type.Geometry,
degrees : Double,
pivot : @type.Coord,
) -> @type.Geometry {
let to_origin = AffineTransform::translate_xy(-pivot.x(), -pivot.y())
let rotation = AffineTransform::rotate_origin(degrees)
let from_origin = AffineTransform::translate_xy(pivot.x(), pivot.y())
to_origin.compose(rotation).compose(from_origin).transform(g)
}
///|
/// Rotate a geometry around its centroid (or 0 if centroid undefined).
pub fn rotate_geometry_around_centroid(
g : @type.Geometry,
degrees : Double,
) -> @type.Geometry {
let pivot = match centroid_geometry(g) {
Some(p) => p.coord()
None => @type.Coord(0.0, 0.0)
}
rotate_geometry_around(g, degrees, pivot)
}