逆双线性插值(任意四边形中的插值) 您所在的位置:网站首页 双线性变换是一种分段线性变换 逆双线性插值(任意四边形中的插值)

逆双线性插值(任意四边形中的插值)

2024-07-04 21:03| 来源: 网络整理| 查看: 265

前面介绍了在二维矩形区域进行插值的双线性插值,如果要在一个任意四边形中进行插值,可以用逆双线性插值(Inverse Bilinear Interpolation)。

虽然叫逆双线性插值,其实思路和双线性插值是一样的:

首先由A点和B点的值插值得到P点的值:

f(P)=f(A)+(f(B)-f(A))\cdot u

然后由D点和C点的值插值得到Q点的值:

f(Q)=f(D)+(f(C)-f(D))\cdot u

最后由P点和Q点的值插值得到X点的值:

f(X)=f(P)+(f(Q)-f(P))\cdot v

因此有

f(X)=f(A)+(f(B)-f(A))\cdot u+(f(D)-f(A))\cdot v\\+(f(A)-f(B)+f(C)-f(D))\cdot u\cdot v

其中u和v为相应的插值系数,只要得到u和v,就可以得到f(X)。求两个未知数需要两个方程,X点的坐标(x,y)分别满足

x=x_{A}+(x_{B}-x_{A})\cdot u+(x_{D}-x_{A})\cdot v+(x_{A}-x_{B}+x_{C}-x_{D})\cdot u\cdot v         (1)

y=y_{A}+(y_{B}-y_{A})\cdot u+(y_{D}-y_{A})\cdot v+(y_{A}-y_{B}+y_{C}-y_{D})\cdot u\cdot v            (2)

方便起见,我们定义向量

H=X-A\\ E=B-A\\ F=D-A\\ G=A-B+C-D

则通过方程(1)得到

u=\frac{Hi-Fi\cdot v}{Ei+Gi\cdot v}

代入方程(2)得

Hj\cdot Ei + Hj\cdot Gi\cdot v = Ej\cdot Hi - Ej\cdot Fi\cdot v + Fj\cdot Ei\cdot v \\+ Fj\cdot Gi\cdot v^2 + Gj\cdot Hi\cdot v - Gj\cdot Fi\cdot v^2

这是一个一元二次方程,其各阶系数为:

k2=Gi\cdot Fj-Gj\cdot Fi\\ k1=Ei\cdot Fj-Ej\cdot Fi+Hi\cdot Gj-Hj\cdot Gi\\ k0=Hi\cdot Ej-Hj\cdot Ei

当X在四边形ABCD内部时,k1^2-4\cdot k0\cdot k2总是大于0的,于是可以解得

v=\frac{-k1\pm \sqrt{k1^2-4\cdot k0\cdot k2}}{2\cdot k2}

然后从两个解中选取在[0,1]区间内的v值,再根据v计算出u,最终求出f(X)。

注意当AB和CD平行时,G=0,从而k2=0,方程退化为线性方程

k0+k1\cdot v=0

从而v=-k0/k1。

参考文章中有代码可以借鉴。

 

参考文章:

inverse bilinear interpolation

http://www.iquilezles.org/www/articles/ibilinear/ibilinear.htm

Quadrilateral Interpolation, Part 2

http://reedbeta.com/blog/quadrilateral-interpolation-part-2/#inversion

纹理四边形插值2--逆双线性插值(InvBilinear Interpolation)

https://gameinstitute.qq.com/community/detail/121581

 



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有