Math 计算左侧和宽度值的公式(基于0%和100%的值)

Math 计算左侧和宽度值的公式(基于0%和100%的值),math,formula,Math,Formula,我怎样才能找到基于百分比值的公式,根据以下0%和100%的值给出左值和宽度值 对于0,00百分比,左侧和带有值的为: 宽度:658 左:11 对于100,00百分比,左侧和宽度值应为: 宽度:0(或1) 左:670 我有一个渐变图像,我在上面应用了一种颜色,给百分比值一个视觉表示。 渐变图像从11像素开始(左:11表示0,00%),宽度为659(左:670表示100,00%=659+11) 左侧和宽度值需要根据百分比动态计算,以便颜色覆盖渐变 如果百分比为0%,则颜色将覆盖整个渐变(左:

我怎样才能找到基于百分比值的公式,根据以下0%和100%的值给出左值和宽度值

对于0,00百分比,左侧和带有值的为:

  • 宽度:658
  • 左:11
对于100,00百分比,左侧和宽度值应为:

  • 宽度:0(或1)
  • 左:670
我有一个渐变图像,我在上面应用了一种颜色,给百分比值一个视觉表示。 渐变图像从11像素开始(左:11表示0,00%),宽度为659(左:670表示100,00%=659+11)

左侧和宽度值需要根据百分比动态计算,以便颜色覆盖渐变

如果百分比为0%,则颜色将覆盖整个渐变(左:11,宽:659)

如果百分比为100%,则颜色根本不会覆盖渐变(左:670,即659+11,宽度:1或0)


您要查找的公式可以表示为
f(x)=ax+b
。f(x)是您想要获得的宽度,x是百分比,a&b是(当前未知)常数

如果两个点(例如0和100)的值为f(x),则可以导出如下公式:

f(0) = valueAtZero = a*0 + b
b = valueAtZero
f(100) = valueAtOneHundred = a*100 + b
valueAtOneHundred - b = a*100
a = (valueAtOneHundred - b) / 100
现在你有了a和b,你可以解出你想要的任何百分比x。上述过程转化为伪代码,如下所示:

function getValueAtXPercent(x, valueAtZero, valueAtOneHundred):
    b = valueAtZero
    a = (valueAtOneHundred - b) / 100
    return a*x + b
现在您可以调用getValueAtXPercent(50658,1),它将返回50%的宽度值

下面是一个具体的python实现:

def f(x, valueAtZero, valueAtOneHundred):
    b = valueAtZero
    a = (valueAtOneHundred - b) / 100.0
    return a*x + b

def showStats(percent):
    left = f(percent, 11, 670)
    width = f(percent, 658, 0)
    output = "At {0}%, left={1} and width={2}".format(percent, left, width)
    print output

showStats(0)
showStats(50)
showStats(100)
输出:

At 0%, left=11.0 and width=658.0
At 50%, left=340.5 and width=329.0
At 100%, left=670.0 and width=0.0

对于0%,你的意思是宽度=648吗?谢谢凯文,我刚试过,但没有得到预期的结果,也许我的帖子不够清晰?getValueAtXPercent(100,00658,1)将返回58,00,但“left”的预期值为670,而“width”的预期值为1。您的实现可能存在问题。在我的伪代码中,getValueAtXPercent(100658,1)将返回((1-658)/100)*100+658=1,这是宽度的预期值。类似地,getValueAtXPercent(100,11670)返回((670-11)/100)*100+11=670,这是left的期望值。@user706058,我想我现在明白你想要什么了。我已经扩展了我的答案。
def f(x, valueAtZero, valueAtOneHundred):
    b = valueAtZero
    a = (valueAtOneHundred - b) / 100.0
    return a*x + b

def showStats(percent):
    left = f(percent, 11, 670)
    width = f(percent, 658, 0)
    output = "At {0}%, left={1} and width={2}".format(percent, left, width)
    print output

showStats(0)
showStats(50)
showStats(100)
At 0%, left=11.0 and width=658.0
At 50%, left=340.5 and width=329.0
At 100%, left=670.0 and width=0.0