Я могу вычислить среднее число этих чисел?

Ваши значения для createLinearGradient были за пределами прямоугольника, в котором вы рисовали.

const canvas = document.getElementById('one');
const c = canvas.getContext('2d');
const grad = c.createLinearGradient(100, 100, 200, 200);
grad.addColorStop(0, "red");
grad.addColorStop(1, "blue");

c.fillStyle = grad;
c.fillRect(100, 100, 100, 100);
canvas {
  outline: 1px solid black
}
<canvas id="one" width="300" height="300"></canvas>

7
задан paxdiablo 12 October 2010 в 02:30
поделиться

6 ответов

Следующие формулы позволяют Вам отслеживать средние числа только от сохраненного среднего числа и количества, как Вы запросили.

currentScore = (currentScore * currentCount + newValue) / (currentCount + 1)
currentCount = currentCount + 1

Это полагается на то, что Ваше среднее число в настоящее время является Вашей суммой, разделенной на количество. Таким образом, Вы просто умножаете количество на среднее число, чтобы получить сумму, добавить Ваше новое значение и разделиться на (count+1), затем увеличить количество.

Так, скажем, у Вас есть данные {7,9,11,1,12} и единственной вещью, которую Вы сохраняете, является среднее число и количество. Поскольку каждое число добавляется, Вы добираетесь:

+--------+-------+----------------------+----------------------+
| Number | Count |   Actual average     | Calculated average   |
+--------+-------+----------------------+----------------------+
|      7 |     1 | (7)/1           =  7 | (0 * 0 +  7) / 1 = 7 |
|      9 |     2 | (7+9)/2         =  8 | (7 * 1 +  9) / 2 = 8 |
|     11 |     3 | (7+9+11)/3      =  9 | (8 * 2 + 11) / 3 = 9 |
|      1 |     4 | (7+9+11+1)/4    =  7 | (9 * 3 +  1) / 4 = 7 |
|     12 |     5 | (7+9+11+1+12)/5 =  8 | (7 * 4 + 12) / 5 = 8 |
+--------+-------+----------------------+----------------------+
20
ответ дан 6 December 2019 в 04:56
поделиться

Довольно легко действительно при рассмотрении формулы для среднего числа: A1 + A2 + ... + AN/N. Теперь, Если у Вас есть старое среднее число и N (количество чисел), можно легко вычислить новое среднее число:

newScore = (currentScore * currentCount + someNewValue)/(currentCount + 1)
3
ответ дан 6 December 2019 в 04:56
поделиться

Мне нравится хранить сумму и количество. Это избегает, чтобы дополнительное умножилось каждый раз.

current_sum += input;
current_count++;
current_average = current_sum/current_count;
16
ответ дан 6 December 2019 в 04:56
поделиться

Можно сохранить currentCount и sumScore, и Вы вычисляете sumScore/currentCount.

2
ответ дан 6 December 2019 в 04:56
поделиться

или... если Вы хотите быть глупыми, можно сделать это в одной строке:

 current_average = (current_sum = current_sum + newValue) / ++current_count;

:)

2
ответ дан 6 December 2019 в 04:56
поделиться

плавайте currentScore теперь равняется (currentScore * (currentCount-1) + 4.5)/currentCount?

1
ответ дан 6 December 2019 в 04:56
поделиться
Другие вопросы по тегам:

Похожие вопросы: