@@ -25,10 +25,12 @@ class RadarPainter extends CustomPainter {
2525 ..strokeWidth = 1 ;
2626
2727 // Draw rings
28- canvas.drawCircle (center, radius, ringPaint);
29- canvas.drawCircle (center, radius * 0.75 , ringPaint);
30- canvas.drawCircle (center, radius * 0.5 , ringPaint);
31- canvas.drawCircle (center, radius * 0.25 , ringPaint);
28+ final distances = [10.0 , 20.0 , 30.0 , 40.0 , 50.0 ];
29+ const double maxDist = 50.0 ;
30+ for (final d in distances) {
31+ final r = _getScaledRadius (d, maxDist, radius);
32+ canvas.drawCircle (center, r, ringPaint);
33+ }
3234
3335 // Draw Sweep
3436 final sweepPaint = Paint ()
@@ -60,13 +62,9 @@ class RadarPainter extends CustomPainter {
6062 }
6163
6264 void _drawDeviceNode (Canvas canvas, Offset center, double maxRadius, RadarDevice device) {
63- // Logarithmic scaling formula from thesis:
64- // d_scaled = radius * log(1 + d * k) / log(1 + d_max * k)
65- const double k = 0.5 ; // steepness coefficient
6665 const double maxDist = 50.0 ; // meters
67-
6866 final d = device.distance.clamp (0.0 , maxDist);
69- final scaledDistance = maxRadius * ( log ( 1 + d * k) / log ( 1 + maxDist * k) );
67+ final scaledDistance = _getScaledRadius (d, maxDist, maxRadius );
7068
7169 // Calculate bearing relative to user heading
7270 final double relativeBearing = (device.bearing - userHeading + 360 ) % 360 ;
@@ -111,6 +109,13 @@ class RadarPainter extends CustomPainter {
111109 );
112110 }
113111
112+ double _getScaledRadius (double distance, double maxDistance, double maxVisualRadius) {
113+ // Logarithmic scaling formula from thesis:
114+ // d_scaled = radius * log(1 + d * k) / log(1 + d_max * k)
115+ const double k = 0.5 ; // steepness coefficient
116+ return maxVisualRadius * (log (1 + distance * k) / log (1 + maxDistance * k));
117+ }
118+
114119 @override
115120 bool shouldRepaint (covariant RadarPainter oldDelegate) {
116121 return oldDelegate.sweepAngle != sweepAngle ||
0 commit comments