我手头有这样的问题。想象一下,有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 ......)保持不变同样的。
这是我考虑的方法。
所以,在我的例子中,它将是这样的:
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
问题。有更好的方法吗?
答案 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的总和不会改变(平均值),所有其他滑块都会按比例改变。