凸四边形上的双线性插值

欢迎关注更多精彩
关注我,学习常用算法与数据结构,一题多解,降维打击。

在图形学中对于物体的描述往往是离散,但是在具体展示过程中我们又希望是连续。线性插值是解决离散与连续的常用手段。在三角形中的插值之前已经有了点击前往。本文是针对凸四边形的插值。

矩形上的双线性插值

凸四边形上的双线性插值_第1张图片
对于矩形 Q 11 Q 21 Q 22 Q 12 , 只知道 4 个角点上的函数值 f ( Q 11 ) f ( Q 21 ) f ( Q 22 ) f ( Q 12 ) 对于矩形Q_{11}Q_{21}Q_{22}Q_{12}, 只知道4个角点上的函数值f(Q_{11})f(Q_{21})f(Q_{22})f(Q_{12}) 对于矩形Q11Q21Q22Q12,只知道4个角点上的函数值f(Q11)f(Q21)f(Q22)f(Q12)

现在想知道P处的值。

可以采用双线性插值。

先在x方向上进行插值。

f ( x , y 1 ) = x 2 − x x 2 − x 1 f ( Q 11 ) + x − x 1 x 2 − x 1 f ( Q 21 ) f(x, y_1)=\frac {x_2-x}{x_2-x_1}f(Q_{11}) + \frac{x-x_1}{x_2-x_1}f(Q_{21}) f(x,y1)=x2x1x2xf(Q11)+x2x1xx1f(Q21)

f ( x , y 2 ) = x 2 − x x 2 − x 1 f ( Q 12 ) + x − x 1 x 2 − x 1 f ( Q 22 ) f(x, y_2)=\frac {x_2-x}{x_2-x_1}f(Q_{12}) + \frac{x-x_1}{x_2-x_1}f(Q_{22}) f(x,y2)=x2x1x2xf(Q12)+x2x1xx1f(Q22)

然后利用上面的结果,在y方向上进行插值。

f ( x , y ) = y 2 − y y 2 − y 1 f ( x , y 1 ) + y − y 1 y 2 − y 1 f ( x , y 2 ) f(x, y)=\frac {y_2-y}{y_2-y_1}f(x,y_1) + \frac{y-y_1}{y_2-y_1}f(x,y_2) f(x,y)=y2y1y2yf(x,y1)+y2y1yy1f(x,y2)

= ( x 2 − x ) ( y 2 − y ) ( x 2 − x 1 ) ( y 2 − y 1 ) f ( Q 11 ) + ( x − x 1 ) ( y 2 − y ) ( x 2 − x 1 ) ( y 2 − y 1 ) f ( Q 21 ) =\frac {(x_2-x)(y_2-y)}{(x_2-x_1)(y_2-y_1)}f(Q_{11}) + \frac {(x-x_1)(y_2-y)}{(x_2-x_1)(y_2-y_1)}f(Q_{21}) =(x2x1)(y2y1)(x2x)(y2y)f(Q11)+(x2x1)(y2y1)(xx1)(y2y)f(Q21)

+ ( x 2 − x ) ( y − y 1 ) ( x 2 − x 1 ) ( y 2 − y 1 ) f ( Q 12 ) + ( x − x 1 ) ( y − y 1 ) ( x 2 − x 1 ) ( y 2 − y 1 ) f ( Q 22 ) … … … … ( 1 ) + \frac{(x_2-x)(y-y_1)}{(x_2-x_1)(y_2-y_1)}f(Q_{12})+ \frac{(x-x_1)(y-y_1)}{(x_2-x_1)(y_2-y_1)}f(Q_{22}) …………(1) +(x2x1)(y2y1)(x2x)(yy1)f(Q12)+(x2x1)(y2y1)(xx1)(yy1)f(Q22)…………(1)

单位正方形上的双线性插值

假设 x 1 = y 1 = 0 , x 2 = y 2 = 1 假设x_1=y_1=0, x_2=y_2=1 假设x1=y1=0,x2=y2=1
那么

( x 2 − x 1 ) ( y 2 − y 1 ) = 1 (x_2-x_1)(y_2-y_1)=1 (x2x1)(y2y1)=1

则(1)式可以变成

f ( x , y ) = ( 1 − x ) ( 1 − y ) ⋅ f ( 0 , 0 ) + x ( 1 − y ) ⋅ f ( 1 , 0 ) + ( 1 − x ) y ⋅ f ( 0 , 1 ) + x ⋅ y ⋅ f ( 1 , 1 ) … … … … ( 2 ) f(x,y) = (1-x)(1-y)\cdot f(0,0) + {x(1-y)}\cdot f(1,0)+ {(1-x)y}\cdot f(0,1)+ x\cdot y\cdot f(1,1) …………(2) f(x,y)=(1x)(1y)f(0,0)+x(1y)f(1,0)+(1x)yf(0,1)+xyf(1,1)…………2

凸四边形上的插值

凸四边形上的双线性插值_第2张图片
对于凸四边 v 1 v 2 v 3 v 4 , 只知道 4 个角点上的函数值 f ( v 1 ) f ( v 2 ) f ( v 3 ) f ( v 4 ) 对于凸四边v_{1}v_{2}v_{3}v_{4}, 只知道4个角点上的函数值f(v_{1})f(v_{2})f(v_{3})f(v_{4}) 对于凸四边v1v2v3v4,只知道4个角点上的函数值f(v1)f(v2)f(v3)f(v4)

现在想知道P区域内点x处的值。

双线性插值转化

可以将四边形参数化到单位正方形,然后构造一个双线性插值的形式。

对于 x ∈ P , x 可以由四个角点插值得到 对于x\in P, x可以由四个角点插值得到 对于xP,x可以由四个角点插值得到
x = ( 1 − λ ) ( 1 − μ ) ⋅ v 1 + λ ( 1 − μ ) ⋅ v 2 + ( 1 − λ ) μ ⋅ v 4 + λ ⋅ μ ⋅ v 3 … … … … ( 3 ) x= (1-\lambda)(1-\mu)\cdot v_1 + \lambda(1-\mu)\cdot v_2+ (1-\lambda)\mu\cdot v_4+ \lambda\cdot \mu\cdot v_3 …………(3) x=(1λ)(1μ)v1+λ(1μ)v2+(1λ)μv4+λμv3…………3


f ( x ) = ( 1 − λ ) ( 1 − μ ) ⋅ f ( v 1 ) + λ ( 1 − μ ) ⋅ f ( v 2 ) + ( 1 − λ ) μ ⋅ f ( v 4 ) + λ ⋅ μ ⋅ f ( v 3 ) … … … … ( 4 ) f(x)= (1-\lambda)(1-\mu)\cdot f(v_1) + \lambda(1-\mu)\cdot f(v_2)+ (1-\lambda)\mu\cdot f(v_4)+ \lambda\cdot \mu\cdot f(v_3) …………(4) f(x)=(1λ)(1μ)f(v1)+λ(1μ)f(v2)+(1λ)μf(v4)+λμf(v3)…………4

只要我们求得 λ 和 μ , f ( x ) 就可以得到。 只要我们求得\lambda和\mu,f(x)就可以得到。 只要我们求得λμf(x)就可以得到。

求解未知数

一共2个未知量需要2条方程,式子(3)已经有一条方程。

对于插值的基函数 ϕ i , ∑ i = 1 4 ϕ i = 1 对于插值的基函数\phi_i, \displaystyle \sum_{i=1}^{4}\phi_i=1 对于插值的基函数ϕi,i=14ϕi=1

对于式子( 3 )来说 ( ϕ 1 , ϕ 2 , ϕ 3 , ϕ 4 ) = [ ( 1 − λ ) ( 1 − μ ) , λ ( 1 − μ ) , ( 1 − λ ) μ , λ ⋅ μ ] 对于式子(3)来说 (\phi_1, \phi_2,\phi_3, \phi_4)=[(1-\lambda)(1-\mu), \lambda(1-\mu), (1-\lambda)\mu, \lambda\cdot \mu] 对于式子(3)来说(ϕ1,ϕ2,ϕ3,ϕ4)=[(1λ)(1μ)λ(1μ)(1λ)μλμ]

现在有2条方程了,理论上可以解出两个未知数。
下面来解出这两个未知量。

先定义一些下面要用到的变量名。
凸四边形上的双线性插值_第3张图片

x为P区域内一点。

d i = v i − x , i = { 1 , 2 , 3 , 4 } d_i = v_i-x, i=\{1,2,3,4\} di=vix,i={1,2,3,4}

A i 为 △ x v i v i + 1 的面积 = d i × d i + 1 / 2 。 A_i为\triangle xv_iv_{i+1}的面积=d_i\times d_{i+1}/2。 Aixvivi+1的面积=di×di+1/2

B i 为 △ x v i − 1 v i + 1 的面积 = d i − 1 × d i + 1 / 2 。 B_i为\triangle xv_{i-1}v_{i+1}的面积=d_{i-1}\times d_{i+1}/2。 Bixvi1vi+1的面积=di1×di+1/2

根据式子(3)对x移项可以得到

( 1 − λ ) ( 1 − μ ) ⋅ ( v 1 − x ) + λ ( 1 − μ ) ⋅ ( v 2 − x ) + ( 1 − λ ) μ ⋅ ( v 4 − x ) + λ ⋅ μ ⋅ ( v 3 − x ) = 0 (1-\lambda)(1-\mu)\cdot (v_1-x) + \lambda(1-\mu)\cdot (v_2-x)+ (1-\lambda)\mu\cdot (v_4-x)+ \lambda\cdot \mu\cdot (v_3-x)=0 (1λ)(1μ)(v1x)+λ(1μ)(v2x)+(1λ)μ(v4x)+λμ(v3x)=0

用di替换得到

( 1 − λ ) ( 1 − μ ) ⋅ d 1 + λ ( 1 − μ ) ⋅ d 2 + ( 1 − λ ) μ ⋅ d 4 + λ ⋅ μ ⋅ d 3 = 0 (1-\lambda)(1-\mu)\cdot d_1 + \lambda(1-\mu)\cdot d_2+ (1-\lambda)\mu\cdot d_4+ \lambda\cdot \mu\cdot d_3=0 (1λ)(1μ)d1+λ(1μ)d2+(1λ)μd4+λμd3=0

对两边同时除以 λ ⋅ μ 对两边同时除以\lambda\cdot\mu 对两边同时除以λμ

令 α = 1 − λ λ , β = 1 − μ μ 令\alpha=\frac {1-\lambda}{\lambda}, \beta=\frac {1-\mu}{\mu} α=λ1λ,β=μ1μ

α β ⋅ d 1 + β ⋅ d 2 + α ⋅ d 4 + d 3 = 0 … … … … ( 5 ) \alpha\beta\cdot d_1+\beta\cdot d_2+\alpha \cdot d_4 + d_3=0…………(5) αβd1+βd2+αd4+d3=0…………5

提取α得到

α ( β ⋅ d 1 + d 4 ) + ( β ⋅ d 2 + d 3 ) = 0 \alpha(\beta\cdot d_1+d_4)+(\beta\cdot d_2 + d_3)=0 α(βd1+d4)+(βd2+d3)=0

利用自己与自己叉乘等于 0 性质,两边都乘以 ( β ⋅ d 1 + d 4 ) , 得到 利用自己与自己叉乘等于0性质,两边都乘以(\beta\cdot d_1+d_4), 得到 利用自己与自己叉乘等于0性质,两边都乘以(βd1+d4),得到

( β ⋅ d 1 + d 4 ) × ( β ⋅ d 2 + d 3 ) (\beta\cdot d_1+d_4)\times(\beta\cdot d_2 + d_3) (βd1+d4)×(βd2+d3)

= β 2 d 1 d 2 + β ( d 1 × d 3 + d 2 × d 4 ) − d 3 × d 4 =\beta^2d_1d_2+\beta(d_1\times d_3+d_2\times d_4)-d_3\times d_4 =β2d1d2+β(d1×d3+d2×d4)d3×d4

根据上面定义替换

= β 2 A 1 + β ( B 2 + B 3 ) − A 3 = 0 =\beta^2A_1+\beta(B_2+B_3)-A_3 = 0 =β2A1+β(B2+B3)A3=0

根据韦达定理公式,解一下上面这个一元二次方程可以得到β,取正值。

β = − B 2 − B 3 + ( B 2 + B 3 ) 2 + 4 A 1 A 3 2 A 1 \beta = \frac {-B_2-B_3+\sqrt{(B_2+B_3)^2+4A_1A_3}}{2A_1} β=2A1B2B3+(B2+B3)2+4A1A3

∴ μ = 1 1 + β = 2 A 1 − B 2 − B 3 + ( B 2 + B 3 ) 2 + 4 A 1 A 3 2 A 1 \therefore \mu=\frac {1}{1+\beta}=\frac {2A_1-B_2-B_3+\sqrt{(B_2+B_3)^2+4A_1A_3}}{2A_1} μ=1+β1=2A12A1B2B3+(B2+B3)2+4A1A3

同理对(5)式提取β.

β ( α ⋅ d 1 + d 2 ) + α ⋅ d 4 + d 3 = 0 \beta (\alpha\cdot d_1+d_2)+\alpha \cdot d_4 + d_3=0 β(αd1+d2)+αd4+d3=0

= = > ( α ⋅ d 4 + d 3 ) × ( α ⋅ d 1 + d 2 ) = 0 ==>(\alpha \cdot d_4 + d_3)\times (\alpha\cdot d_1+ d_2)=0 ==>(αd4+d3)×(αd1+d2)=0

= = > α 2 d 4 d 1 + α ( d 4 × d 2 + d 3 d 1 ) − d 2 d 3 = 0 ==>\alpha^2d_4d_1+\alpha(d_4\times d_2+d_3d_1)-d_2d_3=0 ==>α2d4d1+α(d4×d2+d3d1)d2d3=0

= = > α 2 A 4 + α ( B 1 + B 4 ) − A 2 = 0 ==>\alpha^2A_4+\alpha(B_1+B_4)-A_2=0 ==>α2A4+α(B1+B4)A2=0

= = > α = − B 1 − B 4 + ( B 1 + B 4 ) 2 + 4 A 4 A 2 2 A 4 ==>\alpha=\frac {-B_1-B_4+\sqrt{(B_1+B_4)^2+4A_4A_2}}{2A_4} ==>α=2A4B1B4+(B1+B4)2+4A4A2

λ = 1 1 + α = 2 A 4 2 A 4 − B 1 − B 4 + ( B 1 + B 4 ) 2 + 4 A 4 A 2 \lambda=\frac {1}{1+\alpha} = \frac {2A_4}{2A_4-B_1-B_4+\sqrt{(B_1+B_4)^2+4A_4A_2}} λ=1+α1=2A4B1B4+(B1+B4)2+4A4A2 2A4

λ , μ 全部解出 \lambda,\mu 全部解出 λ,μ全部解出

结论

对P区域内一点x, 的函数值可以由下式得到。

f ( x ) = ( 1 − λ ) ( 1 − μ ) ⋅ f ( v 1 ) + λ ( 1 − μ ) ⋅ f ( v 2 ) + ( 1 − λ ) μ ⋅ f ( v 4 ) + λ ⋅ μ ⋅ f ( v 3 ) f(x)= (1-\lambda)(1-\mu)\cdot f(v_1) + \lambda(1-\mu)\cdot f(v_2)+ (1-\lambda)\mu\cdot f(v_4)+ \lambda\cdot \mu\cdot f(v_3) f(x)=(1λ)(1μ)f(v1)+λ(1μ)f(v2)+(1λ)μf(v4)+λμf(v3)

其中 μ , λ 可以由 x 与角点组成的三角形的面积来表示 其中\mu,\lambda 可以由x与角点组成的三角形的面积来表示 其中μ,λ可以由x与角点组成的三角形的面积来表示


本人码农,希望通过自己的分享,让大家更容易学懂计算机知识。

你可能感兴趣的:(图形学,图形学,插值)