线性映射(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*}
\]