🥚 chore: Update tg animation.

This commit is contained in:
jarvis2f 2024-12-31 09:49:07 +08:00
parent 36b50ead7b
commit 74f55f2457
2 changed files with 30 additions and 11 deletions

View file

@ -1,6 +1,5 @@
package telegram.files;
import java.util.Collections;
import java.util.List;
import java.util.Map;
import java.util.TreeMap;
@ -77,25 +76,45 @@ public class AvgSpeed {
}
private long smoothSpeed(long currentSpeed) {
if (speedPoints.isEmpty()) {
return currentSpeed;
}
List<Long> recentSpeeds = speedPoints.values().stream()
.skip(Math.max(0, speedPoints.size() - smoothingWindowSize))
.map(point -> point.speed)
.collect(Collectors.toList());
recentSpeeds.add(currentSpeed);
// Sort speeds to find median
Collections.sort(recentSpeeds);
long median = recentSpeeds.get(recentSpeeds.size() / 2);
if (recentSpeeds.size() < 2) {
return currentSpeed;
}
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()
.filter(speed -> speed <= threshold)
.filter(speed -> speed >= lowerThreshold && speed <= upperThreshold)
.toList();
// Calculate average of remaining speeds
return (long) filteredSpeeds.stream()
return filteredSpeeds.isEmpty()
? currentSpeed
: (long) filteredSpeeds.stream()
.mapToLong(Long::longValue)
.average()
.orElse(currentSpeed);

File diff suppressed because one or more lines are too long