From dfec92db9e4339a9c43d3ee71b9e73f277346d7a Mon Sep 17 00:00:00 2001 From: Jerboa-app Date: Sat, 19 Jul 2025 11:39:31 +0100 Subject: [PATCH] Fixes pointsRoughlySquare --- app/build.gradle | 4 +- .../app/jerboa/spp/ui/view/SPPRenderer.kt | 43 +++++++++++++------ 2 files changed, 31 insertions(+), 16 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index 98197f6..e16afa1 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -48,8 +48,8 @@ android { applicationId "app.jerboa.spp" minSdk 23 targetSdk 35 - versionCode 48 - versionName "0.7.0" + versionCode 49 + versionName "0.7.1" testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" vectorDrawables { diff --git a/app/src/main/java/app/jerboa/spp/ui/view/SPPRenderer.kt b/app/src/main/java/app/jerboa/spp/ui/view/SPPRenderer.kt index 375752d..bddc63e 100644 --- a/app/src/main/java/app/jerboa/spp/ui/view/SPPRenderer.kt +++ b/app/src/main/java/app/jerboa/spp/ui/view/SPPRenderer.kt @@ -1705,27 +1705,42 @@ class SPPRenderer( } - private fun pointsRoughlySquare(points: List>, tolerance: Float = 160f*160f): Boolean{ + private fun pointsRoughlySquare(points: List>, alignmentTolerance: Float = 50f, sideTolerance: Float = 160f*160f): Boolean{ if (points.size != 4){ return false } - val dists = mutableListOf() + val smallestDists = mutableListOf() for (i in points.indices){ + var k = 0 + val dists = mutableListOf(0.0f,0.0f,0.0f) + var smallDistX = Float.POSITIVE_INFINITY + var smallDistY = Float.POSITIVE_INFINITY for (j in points.indices){ if (i != j){ val rx = points[i].first-points[j].first val ry = points[i].second-points[j].second - val d2 = rx*rx+ry*ry + dists[k] = rx*rx+ry*ry + k += 1 + if (abs(rx) < smallDistX) { smallDistX = abs(rx) } + if (abs(ry) < smallDistY) { smallDistY = abs(ry) } + } + } + dists.sort() + if (abs(dists[0]-dists[1]) > sideTolerance) { + return false + } + if (smallDistX > alignmentTolerance || smallDistY > alignmentTolerance) + { + return false + } + smallestDists.add(dists[0]) + } - if (dists.size == 0) { dists.add(d2) } - if (dists.size == 1){ - if (abs(dists[0] - d2 ) > tolerance){ - dists.add(d2) - } - } - if (dists.size == 2){ - if (abs(dists[0] - d2 ) > tolerance && abs(dists[1] - d2 ) > tolerance){ - return false - } - } + for (i in smallestDists.indices) + { + for (j in smallestDists.indices) + { + if (abs(smallestDists[i]-smallestDists[j]) > sideTolerance) + { + return false } } }