a tiny bit more precision, still fails on 90 degree rotation

This commit is contained in:
Henry Schimke
2022-10-13 18:30:43 -05:00
parent c236cbfd57
commit f9ea8b97f9

View File

@@ -210,14 +210,14 @@ impl FinderPatternFinder {
if totalModuleSize < 7 { if totalModuleSize < 7 {
return false; return false;
} }
let moduleSize = totalModuleSize as f32 / 7.0; let moduleSize = totalModuleSize as f64 / 7.0;
let maxVariance = moduleSize as f32 / 2.0; let maxVariance = moduleSize as f64 / 2.0;
// Allow less than 50% variance from 1-1-3-1-1 proportions // Allow less than 50% variance from 1-1-3-1-1 proportions
return ((moduleSize - stateCount[0] as f32).abs()) < maxVariance return ((moduleSize - stateCount[0] as f64).abs()) < maxVariance
&& ((moduleSize - stateCount[1] as f32).abs()) < maxVariance && ((moduleSize - stateCount[1] as f64).abs()) < maxVariance
&& ((3.0 * moduleSize - stateCount[2] as f32).abs()) < 3.0 * maxVariance && ((3.0 * moduleSize - stateCount[2] as f64).abs()) < 3.0 * maxVariance
&& (moduleSize - stateCount[3] as f32).abs() < maxVariance && (moduleSize - stateCount[3] as f64).abs() < maxVariance
&& (moduleSize - stateCount[4] as f32).abs() < maxVariance; && (moduleSize - stateCount[4] as f64).abs() < maxVariance;
} }
/** /**
@@ -238,14 +238,14 @@ impl FinderPatternFinder {
if totalModuleSize < 7 { if totalModuleSize < 7 {
return false; return false;
} }
let moduleSize = totalModuleSize as f32 / 7.0; let moduleSize = totalModuleSize as f64 / 7.0;
let maxVariance = moduleSize / 1.333; let maxVariance = moduleSize / 1.333;
// Allow less than 75% variance from 1-1-3-1-1 proportions // Allow less than 75% variance from 1-1-3-1-1 proportions
return (moduleSize - stateCount[0] as f32).abs() < maxVariance return (moduleSize - stateCount[0] as f64).abs() < maxVariance
&& (moduleSize - stateCount[1] as f32).abs() < maxVariance && (moduleSize - stateCount[1] as f64).abs() < maxVariance
&& (3.0 * moduleSize - stateCount[2] as f32).abs() < 3.0 * maxVariance && (3.0 * moduleSize - stateCount[2] as f64).abs() < 3.0 * maxVariance
&& (moduleSize - stateCount[3] as f32).abs() < maxVariance && (moduleSize - stateCount[3] as f64).abs() < maxVariance
&& (moduleSize - stateCount[4] as f32).abs() < maxVariance; && (moduleSize - stateCount[4] as f64).abs() < maxVariance;
} }
fn getCrossCheckStateCount(&mut self) -> &[u32; 5] { fn getCrossCheckStateCount(&mut self) -> &[u32; 5] {