在保持比率的同时保持相同的平均值

时间:2016-05-11 05:33:15

标签: math

我手头有这样的问题。想象一下,有5个滑块的值范围为0到100.在开始时,它们都设置为50,因此平均得分为50。

目标1.保持平均值为50

假设,如果我将第一个滑块移动到70,为了将平均值保持在50,我将其他4个滑块的值减少到45,即50 - (20/4)= 45。

目标2.维持各个值之间的比率

上面的例子很简单,因为所有4个受影响的值都相等。但是,如果我决定将第5个滑块移动到50,我希望调整所有其他滑块以使各个值之间的比率(例如滑块1 /滑块2为70/45 - > 1,5555 ......)保持不变同样的。

这是我考虑的方法。

  • 步骤1.找到受影响值数组中的最小值(滑块1-4)。
  • 步骤2.计算每个滑块与最小值滑块的比率。
  • 步骤3.这给了我一个公式avg(ratio1 * minV + ratio2 * minV + ratio3 * minV + * minV + newManualV)= 50
  • 步骤4.使用比率计算minV和剩余值。

所以,在我的例子中,它将是这样的:

newManualV = 50 (5th slider)
minV = 45 (any of the 2nd-4th sliders; let's say it's the 2nd)
ratio1 = 1.55556 (1st and minV)
ratio2 = 1 (3rd and minV)
ratio3 = 1 (3rd and minV)

(1.55556*minV + 1*minV + 1*minV + minV + 50) / 5 = 50
4.55556minV = 200
minV = 43.9

New (rounded) slider values are:
68 (43.9 * 1.55556)
44
44
44
50

问题。有更好的方法吗?

2 个答案:

答案 0 :(得分:0)

五个滑块等于维持4个比率。例如x_1/x_2。这只能通过将所有滑块乘以相同的因子来完成。

只要设置了一个值(例如滑块#5),其他所有值都必须相应缩放以保持比率。

old_x_5 = x_5
x_5 = (new value)
scale = x_5/old_x_5
x_4 = x_4*scale
x_3 = x_3*scale
x_2 = x_2*scale
x_1 = x_1*scale

现在你必须重新缩放所有内容才能达到平均目标

average = (x_1+x_2+x_3+x_4+x_5)/5
if average>0
  scale = 50/average
  x_5 = x_5*scale
  x_4 = x_4*scale
  x_3 = x_3*scale
  x_2 = x_2*scale
  x_1 = x_1*scale
else
  (now what?)

这会将新x_5更改为平均目标而非用户输入所需的值。如果任何滑块需要超过100来维持平均值,会发生什么。

答案 1 :(得分:0)

什么更好?我认为有一种更简单的方法,因为您不需要明确计算比率。只需平均分配改变滑块的差异。

用s1,...,s5表示幻灯片值。

假设您更改了s1和数量d。然后,计算s,其他滑块的总和:s = s2 + s3 + s4 + s5。现在,s2 - =(s2 / s)* d。

s1到s5的总和不会改变(平均值),所有其他滑块都会按比例改变。