mirror of
https://github.com/atsunatsu/Look4Sat.git
synced 2026-10-02 03:15:37 +00:00
fix: radar track rendering bugs
- Elevation ring labels were inverted (90/60/30 from outer to inner); now 30/60/90 correctly from outer ring to center - Split track paths at the 0/360° azimuth wrap in both MutualRadarView and main RadarView, so passes crossing due north no longer draw a line straight across the plot
This commit is contained in:
1 parent
998c98267b
commit
1a3f1bb34c
2 files changed
+37
-10
No files matched your search
@@ -60,6 +60,8 @@ import com.rtbishop.look4sat.core.domain.predict.OrbitalPos
|
||||
import com.rtbishop.look4sat.core.domain.predict.PI_2
|
||||
import com.rtbishop.look4sat.core.domain.utility.toRadians
|
||||
import com.rtbishop.look4sat.core.presentation.R
|
||||
import kotlin.math.PI
|
||||
import kotlin.math.abs
|
||||
import kotlin.math.cos
|
||||
import kotlin.math.sin
|
||||
|
||||
@@ -226,13 +228,25 @@ private fun DrawScope.drawSweep(center: Offset, degrees: Float, radius: Float, b
|
||||
|
||||
private fun createTrackPath(positions: List<OrbitalPos>, radius: Float): Path {
|
||||
val trackPath = Path()
|
||||
var lastAzim: Double? = null
|
||||
positions.forEachIndexed { index, pos ->
|
||||
val offset = sph2Cart(pos.azimuth, pos.elevation, radius.toDouble())
|
||||
if (index == 0) trackPath.moveTo(offset.x, offset.y) else trackPath.lineTo(offset.x, offset.y)
|
||||
// Split the path when azimuth wraps 0°/360° to avoid a line across the plot
|
||||
val wrap = lastAzim != null && abs(azimuthDeltaRad(pos.azimuth - lastAzim!!)) > PI
|
||||
if (index == 0 || wrap) trackPath.moveTo(offset.x, offset.y) else trackPath.lineTo(offset.x, offset.y)
|
||||
lastAzim = pos.azimuth
|
||||
}
|
||||
return trackPath
|
||||
}
|
||||
|
||||
/** Normalize an azimuth delta (radians) into the [-PI, PI] range. */
|
||||
private fun azimuthDeltaRad(deltaRad: Double): Double {
|
||||
var d = deltaRad % (2 * PI)
|
||||
if (d > PI) d -= 2 * PI
|
||||
if (d < -PI) d += 2 * PI
|
||||
return d
|
||||
}
|
||||
|
||||
private fun createTrackEffect(trackPath: Path): PathEffect {
|
||||
val shapeRadius = 24f
|
||||
val angle = 120.0.toRadians()
|
||||
|
||||
Reference in new issue
Block a user