From 049d27723dad3c53a5fe6cd1ee51c07df095dfa3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Vuka=C5=A1in=20Stepanovi=C4=87?= Date: Wed, 15 Feb 2023 14:54:51 +0000 Subject: [PATCH] refactor aztec Detector::expand_square --- src/aztec/detector.rs | 28 ++++++++++++---------------- src/rxing_result_point.rs | 4 ++++ 2 files changed, 16 insertions(+), 16 deletions(-) diff --git a/src/aztec/detector.rs b/src/aztec/detector.rs index 6807cc4..da0d337 100644 --- a/src/aztec/detector.rs +++ b/src/aztec/detector.rs @@ -355,10 +355,10 @@ impl<'a> Detector<'_> { * @return the center point */ fn get_matrix_center(&self) -> Point { - let mut point_a = RXingResultPoint::default(); // { x: 0.0, y: 0.0 }; - let mut point_b = RXingResultPoint::default(); // { x: 0.0, y: 0.0 }; - let mut point_c = RXingResultPoint::default(); // { x: 0.0, y: 0.0 }; - let mut point_d = RXingResultPoint::default(); // { x: 0.0, y: 0.0 }; + let mut point_a = RXingResultPoint::default(); + let mut point_b = RXingResultPoint::default(); + let mut point_c = RXingResultPoint::default(); + let mut point_d = RXingResultPoint::default(); let mut fnd = false; @@ -702,20 +702,16 @@ impl<'a> Detector<'_> { new_side: u32, ) -> [RXingResultPoint; 4] { let ratio = new_side as f32 / (2.0f32 * old_side as f32); - let mut dx = corner_points[0].getX() - corner_points[2].getX(); - let mut dy = corner_points[0].getY() - corner_points[2].getY(); - let mut centerx = (corner_points[0].getX() + corner_points[2].getX()) / 2.0f32; - let mut centery = (corner_points[0].getY() + corner_points[2].getY()) / 2.0f32; - let result0 = RXingResultPoint::new(centerx + ratio * dx, centery + ratio * dy); - let result2 = RXingResultPoint::new(centerx - ratio * dx, centery - ratio * dy); + let d = corner_points[0] - corner_points[2]; + let middle = corner_points[0].middle(corner_points[2]); + let result0 = middle + ratio * d; + let result2 = middle - ratio * d; - dx = corner_points[1].getX() - corner_points[3].getX(); - dy = corner_points[1].getY() - corner_points[3].getY(); - centerx = (corner_points[1].getX() + corner_points[3].getX()) / 2.0f32; - centery = (corner_points[1].getY() + corner_points[3].getY()) / 2.0f32; - let result1 = RXingResultPoint::new(centerx + ratio * dx, centery + ratio * dy); - let result3 = RXingResultPoint::new(centerx - ratio * dx, centery - ratio * dy); + let d = corner_points[1] - corner_points[3]; + let middle = corner_points[1].middle(corner_points[3]); + let result1 = middle + ratio * d; + let result3 = middle - ratio * d; [result0, result1, result2, result3] } diff --git a/src/rxing_result_point.rs b/src/rxing_result_point.rs index cb0f776..49bf2db 100644 --- a/src/rxing_result_point.rs +++ b/src/rxing_result_point.rs @@ -214,6 +214,10 @@ impl RXingResultPoint { } } + pub fn middle(self, p: Self) -> Self { + (self + p) / 2.0 + } + pub fn normalized(self) -> Self { self / Self::length(self) }