Skip to content

Commit

Permalink
chore: Directly initialize transform and inverse transform
Browse files Browse the repository at this point in the history
  • Loading branch information
gschulze committed Oct 8, 2024
1 parent 4bfe974 commit 16ddd6b
Showing 1 changed file with 17 additions and 18 deletions.
35 changes: 17 additions & 18 deletions src/coordinate_transform/affine_transform.rs
Original file line number Diff line number Diff line change
Expand Up @@ -5,13 +5,14 @@ use crate::coordinate_transform::CoordinateTransform;

impl CoordinateTransform {
pub fn from_transformation_matrix(transformation_matrix: [f64; 16]) -> TiffResult<Self> {
let mut transform = [0f64; 6];
transform[0] = transformation_matrix[0];
transform[1] = transformation_matrix[1];
transform[2] = transformation_matrix[3];
transform[3] = transformation_matrix[4];
transform[4] = transformation_matrix[5];
transform[5] = transformation_matrix[7];
let transform = [
transformation_matrix[0],
transformation_matrix[1],
transformation_matrix[3],
transformation_matrix[4],
transformation_matrix[5],
transformation_matrix[7],
];

let det = transform[0] * transform[4] - transform[1] * transform[3];
if det.abs() < 0.000000000000001 {
Expand All @@ -20,24 +21,22 @@ impl CoordinateTransform {
)));
}

let mut inverse_transform = [0f64; 6];
inverse_transform[0] = transform[4] / det;
inverse_transform[1] = -transform[1] / det;
inverse_transform[2] = (transform[1] * transform[5] - transform[2] * transform[4]) / det;
inverse_transform[3] = -transform[3] / det;
inverse_transform[4] = transform[0] / det;
inverse_transform[5] = (-transform[0] * transform[5] + transform[2] * transform[3]) / det;
let inverse_transform = [
transform[4] / det,
-transform[1] / det,
(transform[1] * transform[5] - transform[2] * transform[4]) / det,
-transform[3] / det,
transform[0] / det,
(-transform[0] * transform[5] + transform[2] * transform[3]) / det,
];

Ok(CoordinateTransform::AffineTransform {
transform,
inverse_transform,
})
}

pub(super) fn transform_by_affine_transform(
transform: &[f64; 6],
coord: &Coord,
) -> Coord {
pub(super) fn transform_by_affine_transform(transform: &[f64; 6], coord: &Coord) -> Coord {
Coord {
x: coord.x * transform[0] + coord.y * transform[1] + transform[2],
y: coord.x * transform[3] + coord.y * transform[4] + transform[5],
Expand Down

0 comments on commit 16ddd6b

Please sign in to comment.