反向推导嵌套lerp方程中的插值参数X与Y
反向推导嵌套lerp方程中的插值参数X与Y
嘿,这个问题挺有意思的!首先我们得把你写的嵌套lerp公式展开成更直观的形式,这样才能一步步反推X和Y。先把你的计算步骤重新梳理并展开:
你原有的计算流程是:
L1 = A + (B - A) * X L2 = C + (D - C) * X Final = L1 + (L2 - L1) * Y
把Final的表达式展开后会得到:
Final = A*(1-Y) + C*Y + X*[ (B-A)*(1-Y) + (D-C)*Y ]
这个式子是我们后续分析的核心。因为A、B、C、D只能是0或1,所以我们可以分情况讨论,不同的组合会带来完全不同的求解结果:
情况1:B等于A,且D等于C
这时候(B-A)和(D-C)都是0,Final的表达式直接简化成:
Final = A*(1-Y) + C*Y
这意味着X被完全消掉了——它可以是0到1之间的任意值,我们只需要求解Y:
- 如果A和C相等(比如都是0或都是1):那Final必须等于A(否则无解),此时X和Y都可以取0-1之间的任意值
- 如果A和C不等(一个0一个1):Y就等于Final(当A=0、C=1时),或者Y=1-Final(当A=1、C=0时),X依然可以是任意0-1的值
情况2:只有B不等于A,或者只有D不等于C
这两种情况是对称的,我们拿「B≠A但D=C」来举例,此时Final的表达式变为:
Final = (A + (B-A)*X)*(1-Y) + C*Y
这种情况下,我们无法得到唯一的(X,Y)解——对于一个给定的Final,存在无数组(X,Y)满足条件。比如当A=0、B=1、C=1、D=1时,Final = X*(1-Y) + Y,随便给Y一个0-1的值,就能算出对应的X,只要X也在0-1范围内就行。
情况3:B不等于A,且D不等于C
这是最复杂但也可能出现唯一解趋势的情况,我们再细分两种子情况:
子情况3a:(B-A)和(D-C)符号相同
比如A=0、B=1、C=0、D=1(两者都是+1),或者A=1、B=0、C=1、D=0(两者都是-1)。这时候Final的表达式会简化成:
- 对于A=0、B=1、C=0、D=1:
Final = X,也就是X=Final,Y可以是0-1之间的任意值 - 对于A=1、B=0、C=1、D=0:
Final = 1 - X,也就是X=1-Final,Y依然可以是任意0-1的值
子情况3b:(B-A)和(D-C)符号相反
比如A=0、B=1、C=1、D=0(一个+1一个-1),此时Final的表达式是:
Final = Y + X*(1-2Y)
我们可以把它变形为求解X的公式:
X = (Final - Y) / (1 - 2Y) // 注意Y不能等于0.5,否则分母为0
- 如果Y=0.5:此时方程变为
Final=0.5,如果你的Final确实是0.5,那X可以是任意0-1的值;如果Final不是0.5,那无解 - 如果Y≠0.5:你可以任选一个0-1之间的Y值,只要计算出来的X也在0-1范围内,那这组(X,Y)就是有效解
最后还要提个关键点:如果你的Final值不在0-1之间,那所有情况都无解,因为lerp的结果必然落在输入值的区间内,而你的输入都是0或1,所以Final必须在0到1之间才有可能有解。
备注:内容来源于stack exchange,提问作者bonjoli
相关产品推荐
相关产品推荐

