你有两个方程和两个未知数。两个未知数是调整值a和b比如下面的比率是已知的(17/8)
aspect = (value1+a)/(value2+b)
但调整的组合值必须是固定数量 (500)
sum = a + b
解决方案 1
如果纵横比是float类型值17/8=2.125,那么解决方法是
a = (aspect*(value2+sum) - value1)/(aspect+1)
b = (value1 - aspect*value2+sum)/(aspect+1)
在你的情况下,我得到 a = -1192 和 b = 1692
value1 + a = 3808
value2 + b = 1792
比率3808/1792 = 17/8 和总和(1692) + (-1192) = 500
解决方案 2
如果纵横比是有理数aspect = num/den的解决方案是:
a = (num*(value2+sum) - den*value1)/(den + num)
b = (den*(value1+sum) - num*value2)/(den + num)
样本计算又是 (num=17, den=8)
a = (17*(100+500) - 8*5000)/(8 + 17) = -1192
b = (8*(5000+500) - 17*100)/(8 + 17) = +1692
调整
如果您限制a>=0 和a<=sum 以及b>=0 和b<=sum,那么您将无法达到纵横比。
您可以通过以下代码调整a 和b 来执行此操作
if (a<0)
{
a = 0;
b = sum;
}
else if(b<0)
{
a = sum;
b = 0;
}
图表
这个问题的图形如下:
蓝线是具有所需纵横比的值 1 和值 2 的组合。
粉红色的点是起始值(5000,100)。
斜线是给定 sum 调整量的调整值 1 和值 2。我已经包含了 500、1000、2000 和 4000 的行。
斜线与蓝线相交的地方是理想的解决方案。解决办法
红点是上述解决方案在调整前引导您的位置。在调整了非负的a 和b 之后,你会在黑点处结束。
在谷歌表格中,您需要一些额外的列来实现上述内容