线性映射(linear mapping)

在unreal engine里就是Clamp函数。
 问题:P的取值范围是[A, B],要将其线性对应到[X, Y]范围的Q点。已知P,求Q。
这种线性映射问题,其实就是一个缩放+平移的问题。先缩放一下使得两段范围宽度一致,再把两段范围的参照点平移对齐,就完成了映射过程。比如:将[A, B]缩放成[A', B'],其尺寸与[X, Y]相同,再把[A', B']平移叠到[X, Y]上,这样就完成了线性映射。将缩放和平移作用到P上,即可求出Q: \[Q = s * P + t\] s为缩放系数,t为平移量。将P=A,Q=X与P=B,Q=Y两组解分别带入上式,可得二元一次方程组: \[\left\{ \begin{array}{l} X = A * s + t \\ Y = B * s + t \end{array}\right.\] 求解可得: \[\left\{\begin{array}{l} s=\frac{Y-X}{B-A} \\ t=\frac{BX-AY}{B-A} \end{array} \right. \]

另一个角度的理解就是:先求AP在AB中所占比例t,线性映射中该比例不变,因此XQ在XY中所占比例也应为t,于是就有: \[\begin{align*} t = \frac{P-A}{B-A} \\ Q=t*(Y-X) + X \end{align*} \]