From 4baf3821e5c5ccddd01c5f829106646fb8e824c1 Mon Sep 17 00:00:00 2001 From: atsunatsu Date: Sun, 2 Aug 2026 23:36:59 +0800 Subject: [PATCH] fix: elevation curve x-axis float precision loss Absolute epoch millis (~1.7e12) exceeds Float precision (ULP ~131s at that magnitude), so 5s-spaced samples collapsed onto identical x coordinates, producing a stepped/jagged curve. Use Long relative time deltas (sample - start) before converting to Float. --- .../look4sat/feature/mutual/ElevationCurveChart.kt | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/feature/mutual/src/main/java/com/rtbishop/look4sat/feature/mutual/ElevationCurveChart.kt b/feature/mutual/src/main/java/com/rtbishop/look4sat/feature/mutual/ElevationCurveChart.kt index e13a20dd..c81df4de 100644 --- a/feature/mutual/src/main/java/com/rtbishop/look4sat/feature/mutual/ElevationCurveChart.kt +++ b/feature/mutual/src/main/java/com/rtbishop/look4sat/feature/mutual/ElevationCurveChart.kt @@ -104,9 +104,9 @@ fun ElevationCurveChart( if (plotWidth <= 0f || plotHeight <= 0f) return@Canvas - val minTime = startTime.toFloat() - val maxTime = endTime.toFloat() - val timeRange = maxTime - minTime + val minTime = startTime + val maxTime = endTime + val timeRange = (maxTime - minTime).toFloat() if (timeRange <= 0f) return@Canvas // Grid lines @@ -147,7 +147,7 @@ fun ElevationCurveChart( val ptsB = mutableListOf() for ((time, elev) in samples) { - val x = plotLeft + ((time.toFloat() - minTime) / timeRange) * plotWidth + val x = plotLeft + ((time - minTime).toFloat() / timeRange) * plotWidth val yA = plotBottom - ((elev.first.toFloat() / maxElev.toFloat()) * plotHeight).coerceIn(0f, plotHeight) val yB = plotBottom - ((elev.second.toFloat() / maxElev.toFloat()) * plotHeight).coerceIn(0f, plotHeight) ptsA.add(Offset(x, yA))