🥚 chore: Update tg animation.
This commit is contained in:
parent
36b50ead7b
commit
74f55f2457
2 changed files with 30 additions and 11 deletions
|
|
@ -1,6 +1,5 @@
|
||||||
package telegram.files;
|
package telegram.files;
|
||||||
|
|
||||||
import java.util.Collections;
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.TreeMap;
|
import java.util.TreeMap;
|
||||||
|
|
@ -77,25 +76,45 @@ public class AvgSpeed {
|
||||||
}
|
}
|
||||||
|
|
||||||
private long smoothSpeed(long currentSpeed) {
|
private long smoothSpeed(long currentSpeed) {
|
||||||
|
if (speedPoints.isEmpty()) {
|
||||||
|
return currentSpeed;
|
||||||
|
}
|
||||||
|
|
||||||
List<Long> recentSpeeds = speedPoints.values().stream()
|
List<Long> recentSpeeds = speedPoints.values().stream()
|
||||||
.skip(Math.max(0, speedPoints.size() - smoothingWindowSize))
|
.skip(Math.max(0, speedPoints.size() - smoothingWindowSize))
|
||||||
.map(point -> point.speed)
|
.map(point -> point.speed)
|
||||||
.collect(Collectors.toList());
|
.collect(Collectors.toList());
|
||||||
|
|
||||||
recentSpeeds.add(currentSpeed);
|
recentSpeeds.add(currentSpeed);
|
||||||
|
|
||||||
// Sort speeds to find median
|
if (recentSpeeds.size() < 2) {
|
||||||
Collections.sort(recentSpeeds);
|
return currentSpeed;
|
||||||
long median = recentSpeeds.get(recentSpeeds.size() / 2);
|
}
|
||||||
|
|
||||||
|
double mean = recentSpeeds.stream()
|
||||||
|
.mapToLong(Long::longValue)
|
||||||
|
.average()
|
||||||
|
.orElse(currentSpeed);
|
||||||
|
|
||||||
|
double standardDeviation = Math.sqrt(
|
||||||
|
recentSpeeds.stream()
|
||||||
|
.mapToDouble(speed -> {
|
||||||
|
double diff = speed - mean;
|
||||||
|
return diff * diff;
|
||||||
|
})
|
||||||
|
.average()
|
||||||
|
.orElse(0.0)
|
||||||
|
);
|
||||||
|
|
||||||
|
double upperThreshold = mean + (2 * standardDeviation);
|
||||||
|
double lowerThreshold = mean - (2 * standardDeviation);
|
||||||
|
|
||||||
// Filter out speeds that deviate too much from median
|
|
||||||
double threshold = median * 2.0;
|
|
||||||
List<Long> filteredSpeeds = recentSpeeds.stream()
|
List<Long> filteredSpeeds = recentSpeeds.stream()
|
||||||
.filter(speed -> speed <= threshold)
|
.filter(speed -> speed >= lowerThreshold && speed <= upperThreshold)
|
||||||
.toList();
|
.toList();
|
||||||
|
|
||||||
// Calculate average of remaining speeds
|
return filteredSpeeds.isEmpty()
|
||||||
return (long) filteredSpeeds.stream()
|
? currentSpeed
|
||||||
|
: (long) filteredSpeeds.stream()
|
||||||
.mapToLong(Long::longValue)
|
.mapToLong(Long::longValue)
|
||||||
.average()
|
.average()
|
||||||
.orElse(currentSpeed);
|
.orElse(currentSpeed);
|
||||||
|
|
|
||||||
File diff suppressed because one or more lines are too long
Loading…
Reference in a new issue