Вы можете воспользоваться вторым подходом и применить некоторое простое сглаживание, например, продвинуть свой кадр по среднему значению из двух последних значений, всегда округляя в меньшую сторону и распространяя ошибку вперед, т.е. когда сумма является нечетным числом, и вы округляете вниз, чтобы получить целое число, которое вы добавляете 1 к следующей сумме, чтобы уравновесить ее.
Таким образом, 1, 3, 1, 3, 1, 3 ... даст 2, 2, 2, 2, 2 ... и 2, 3, 2, 3, 2, 3 будут производить 2, 3, 2, 3, 2 ... и т. Д. c
псевдокод:
int prevValue = 0
int error = 0;
bool firstValue = true;
int getNextValue(int value)
{
if(firstValue)
{
prevValue = value;
firstValue = false;
}
int sum = value + prevValue + error;
error = sum % 2;
prevValue = value;
return sum / 2; // integer division
}