线性插值函数的基函数构造

线性插值函数的基函数构造

这里介绍的基函数为线性插值对应的基函数,也就是通过不在同一直线上的三个点构造的平面。这里我们直接通过三个点构造一个平面,再将其写法简单的变形就可以找到对应的基函数。

A : ( x 1 , y 1 , z 1 ) , B : ( x 2 , y 2 , z 2 ) , C : ( x 3 , y 3 , z 2 ) A:(x_1,y_1,z_1),B:(x_2,y_2,z_2),C:(x_3,y_3,z_2) A:(x1,y1,z1),B:(x2,y2,z2),C:(x3,y3,z2)是空间中不在同一直线上的三个点,且 A , B , C A,B,C A,B,C三点在平面 π : a x + b y + c z + d = 0 \pi:ax+by+cz+d=0 π:ax+by+cz+d=0上。

这里,利用点法式确定平面 π \pi π。首先,根据向量 A B ⃗ = [ x 2 − x 1 , y 2 − y 1 , z 2 − z 1 ] \vec{AB}=[x_2-x_1,y_2-y_1,z_2-z_1] AB =[x2x1,y2y1,z2z1] A C ⃗ = [ x 3 − x 1 , y 3 − y 1 , z 3 − z 1 ] \vec{AC}=[x_3-x_1,y_3-y_1,z_3-z_1] AC =[x3x1,y3y1,z3z1]构造垂直于 A B ⃗ , A C ⃗ \vec{AB},\vec{AC} AB AC 的向量 n ⃗ \vec{n} n n ⃗ \vec{n} n 即为所求平面的法向量,

n ⃗ = A B ⃗ × A C ⃗     = [ ( y 2 − y 1 ) ( z 3 − z 1 ) − ( y 3 − y 1 ) ( z 2 − z 1 ) ,           ( z 2 − z 1 ) ( x 3 − x 1 ) − ( z 3 − z 1 ) ( x 2 − x 1 ) ,           ( x 2 − x 1 ) ( y 3 − y 1 ) − ( x 3 − x 1 ) ( y 2 − y 1 ) ] \vec{n} = \vec{AB}\times\vec{AC}\\\ \ \ = [(y_2-y_1)(z_3-z_1)-(y_3-y_1)(z_2-z_1), \\\ \ \ \ \ \ \ \ \ (z_2-z_1)(x_3-x_1)-(z_3-z_1)(x_2-x_1), \\\ \ \ \ \ \ \ \ \ (x_2-x_1)(y_3-y_1)-(x_3-x_1)(y_2-y_1)] n =AB ×AC    =[(y2y1)(z3z1)(y3y1)(z2z1),         (z2z1)(x3x1)(z3z1)(x2x1),         (x2x1)(y3y1)(x3x1)(y2y1)]

进而,设点 P ( x , y , z ) P(x,y,z) P(x,y,z)在平面 π \pi π上,则有 P A ⃗ ⊥ n ⃗ \vec{PA}\perp\vec{n} PA n ,即
0 = ( x − x 1 ) ( ( y 2 − y 1 ) ( z 3 − z 1 ) − ( y 3 − y 1 ) ( z 2 − z 1 ) )     + ( y − y 1 ) ( ( z 2 − z 1 ) ( x 3 − x 1 ) − ( z 3 − z 1 ) ( x 2 − x 1 ) )     + ( z − z 1 ) ( ( x 2 − x 1 ) ( y 3 − y 1 ) − ( x 3 − x 1 ) ( y 2 − y 1 ) ) 0 = (x-x_1)((y_2-y_1)(z_3-z_1)-(y_3-y_1)(z_2-z_1))\\\ \ \ +(y-y_1)((z_2-z_1)(x_3-x_1)-(z_3-z_1)(x_2-x_1))\\\ \ \ +(z-z_1)((x_2-x_1)(y_3-y_1)-(x_3-x_1)(y_2-y_1)) 0=(xx1)((y2y1)(z3z1)(y3y1)(z2z1))   +(yy1)((z2z1)(x3x1)(z3z1)(x2x1))   +(zz1)((x2x1)(y3y1)(x3x1)(y2y1))

整理可得:

( ( x 2 − x 1 ) ( y 3 − y 1 ) − ( x 3 − x 1 ) ( y 2 − y 1 ) ) z = − ( z 1 ( ( x − x 1 ) ( y 3 − y 1 − ( y 2 − y 1 ) )     + z 2 ( ( y − y 1 ) ( x 3 − x 1 ) − ( x − x 1 ) ( y 3 − y 1 ) )     + z 3 ( ( x − x 1 ) ( y 2 − y 1 ) − ( y − y 1 ) ( x 1 − x 1 ) )     + z 1 ( y − y 1 ) ( x 2 − x 1 − ( x 3 − x 1 ) ) )     + z 1 ( ( x 2 − x 1 ) ( y 3 − y 1 ) − ( x 3 − x 1 ) ( y 2 − y 1 ) ) = z 1 ( ( x − x 2 ) ( y 2 − y 3 ) + ( y − y 2 ) ( x 3 − x 2 ) ) + z 2 ( ( x − x 3 ) ( y 3 − y 1 ) + ( y − y 3 ) ( x 1 − x 3 ) ) + z 3 ( ( x − x 1 ) ( y 1 − y 2 ) + ( y − y 1 ) ( x 2 − x 1 ) ) ((x_2-x_1)(y_3-y_1)-(x_3-x_1)(y_2-y_1))z \\= -(z_1((x-x_1)(y_3-y_1-(y_2-y_1))\\\ \ \ +z_2((y-y_1)(x_3-x_1)-(x-x_1)(y_3-y_1))\\\ \ \ +z_3((x-x_1)(y_2-y_1)-(y-y_1)(x_1-x_1))\\\ \ \ +z_1(y-y_1)(x_2-x_1-(x_3-x_1)))\\\ \ \ +z_1((x_2-x_1)(y_3-y_1)-(x_3-x_1)(y_2-y_1)) \\=z_1((x-x_2)(y_2-y_3)+(y-y_2)(x_3-x_2))\\+z_2((x-x_3)(y_3-y_1)+(y-y_3)(x_1-x_3))\\+z_3((x-x_1)(y_1-y_2)+(y-y_1)(x_2-x_1)) ((x2x1)(y3y1)(x3x1)(y2y1))z=(z1((xx1)(y3y1(y2y1))   +z2((yy1)(x3x1)(xx1)(y3y1))   +z3((xx1)(y2y1)(yy1)(x1x1))   +z1(yy1)(x2x1(x3x1)))   +z1((x2x1)(y3y1)(x3x1)(y2y1))=z1((xx2)(y2y3)+(yy2)(x3x2))+z2((xx3)(y3y1)+(yy3)(x1x3))+z3((xx1)(y1y2)+(yy1)(x2x1))

由三角形面积 S △ A B C = 1 / 2 ( ( x 2 − x 1 ) ( y 3 − y 1 ) − ( x 3 − x 1 ) ( y 2 − y 1 ) ) S_{\triangle ABC}=1/2((x_2-x_1)(y_3-y_1)-(x_3-x_1)(y_2-y_1)) SABC=1/2((x2x1)(y3y1)(x3x1)(y2y1))因此有

z = [ z 1 ( ( x − x 2 ) ( y 2 − y 3 ) + ( y − y 2 ) ( x 3 − x 2 ) )    + z 2 ( ( x − x 3 ) ( y 3 − y 1 ) + ( y − y 3 ) ( x 1 − x 3 ) )    + z 3 ( ( x − x 1 ) ( y 1 − y 2 ) + ( y − y 1 ) ( x 2 − x 1 ) ) ] / ( 2 ∗ S △ A B C ) z = [z_1((x-x_2)(y_2-y_3)+(y-y_2)(x_3-x_2))\\\ \ +z_2((x-x_3)(y_3-y_1)+(y-y_3)(x_1-x_3))\\\ \ +z_3((x-x_1)(y_1-y_2)+(y-y_1)(x_2-x_1))]/(2*S_{\triangle ABC}) z=[z1((xx2)(y2y3)+(yy2)(x3x2))  +z2((xx3)(y3y1)+(yy3)(x1x3))  +z3((xx1)(y1y2)+(yy1)(x2x1))]/(2SABC)

因此线性插值基函数可以写为

N A = ( ( x − x 2 ) ( y 2 − y 3 ) + ( y − y 2 ) ( x 3 − x 2 ) ) / ( 2 ∗ S △ A B C ) N_A = ((x-x_2)(y_2-y_3)+(y-y_2)(x_3-x_2))/(2*S_{\triangle ABC}) NA=((xx2)(y2y3)+(yy2)(x3x2))/(2SABC)

N B = ( ( x − x 3 ) ( y 3 − y 1 ) + ( y − y 3 ) ( x 1 − x 3 ) ) / ( 2 ∗ S △ A B C ) N_B=((x-x_3)(y_3-y_1)+(y-y_3)(x_1-x_3))/(2*S_{\triangle ABC}) NB=((xx3)(y3y1)+(yy3)(x1x3))/(2SABC)

N C = ( ( x − x 1 ) ( y 1 − y 2 ) + ( y − y 1 ) ( x 2 − x 1 ) ) / ( 2 ∗ S △ A B C ) N_C=((x-x_1)(y_1-y_2)+(y-y_1)(x_2-x_1))/(2*S_{\triangle ABC}) NC=((xx1)(y1y2)+(yy1)(x2x1))/(2SABC)

上述基函数也可以写为

N A = ( x ( y 2 − y 3 ) + y ( x 3 − x 2 ) + x 2 y 3 − y 2 x 3 ) / ( 2 ∗ S △ A B C ) N_A = (x(y_2-y_3)+y(x_3-x_2)+x_2y_3-y_2x_3)/(2*S_{\triangle ABC}) NA=(x(y2y3)+y(x3x2)+x2y3y2x3)/(2SABC)

N B = ( x ( y 3 − y 1 ) + y ( x 1 − x 3 ) + x 3 y 1 − y 3 x 1 ) / ( 2 ∗ S △ A B C ) N_B=(x(y_3-y_1)+y(x_1-x_3)+x_3y_1-y_3x_1)/(2*S_{\triangle ABC}) NB=(x(y3y1)+y(x1x3)+x3y1y3x1)/(2SABC)

N C = ( x ( y 1 − y 2 ) + y ( x 2 − x 1 ) + x 1 y 2 − x 2 y 1 ) / ( 2 ∗ S △ A B C ) N_C=(x(y_1-y_2)+y(x_2-x_1)+x_1y_2-x_2y_1)/(2*S_{\triangle ABC}) NC=(x(y1y2)+y(x2x1)+x1y2x2y1)/(2SABC)

注意:这里利用空间中不在同一条直线上的三个点确定唯一平面,通过这种方式构造平面方程,进一步改写方程样式,得到基函数。

实验结果

我们绘制过点 A : ( 1 , 2 , 1 ) , B : ( 2 , 3 , 6 ) , C : ( 1 , 6 , 3 ) A:(1,2,1),B:(2,3,6),C:(1,6,3) A:(1,2,1),B:(2,3,6),C:(1,6,3)的平面 π \pi π,结果如下
在这里插入图片描述
在这里插入图片描述
实例代码如下:

clc,clear
x = [1,2,4];
y = [2,3,1];
z = [1,6,3];
p = (x(1)-x(2))*(y(1)-y(3)) - (y(1)-y(2))*(x(1)-x(3));
% K1 = @(t,s)(s-y(2))*(x(3)-x(2)) - (t-x(2))*(y(3)-y(2));
% K2 = @(t,s)(s-y(3))*(x(1)-x(3)) - (t-x(3))*(y(1)-y(3));
% K3 = @(t,s)(s-y(1))*(x(2)-x(1)) - (t-x(1))*(y(2)-y(1));
K1 = @(t,s)((y(2)-y(3))*t - (x(2)-x(3))*s + x(2)*y(3)-x(3)*y(2));
K2 = @(t,s)((y(3)-y(1))*t - (x(3)-x(1))*s + x(3)*y(1)-x(1)*y(3));
K3 = @(t,s)((y(1)-y(2))*t - (x(1)-x(2))*s + x(1)*y(2)-x(2)*y(1));
disp('下面这个矩阵为基函数在对应点处的值,即克罗内克尔符号矩阵')
disp([K1(x(1),y(1)),K1(x(2),y(2)),K1(x(3),y(3))
 K2(x(1),y(1)),K2(x(2),y(2)),K2(x(3),y(3))
 K3(x(1),y(1)),K3(x(2),y(2)),K3(x(3),y(3))]/p)
F = @(t,s) (z(1) * K1(t,s) + z(2) * K2(t,s) + z(3) * K3(t,s))/p;
% F = triangle_2D(x,y,z);
xx = 0:0.1:5;
for i = 1:length(xx)
    for j = 1:length(xx)
        Z(j,i) = F(xx(i),xx(j));
    end
end
% 注意到surf绘图中,Z的列数对应的是X,行数对应的是Y,在制作Z矩阵时,应该注意这一点。
[X,Y] = meshgrid(xx);
surf(X,Y,Z)
hold on
plot3(x,y,z,'r*')
  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值