下面是基于形状功能的明显的例子。
考虑功能:
U1(X,Z)=(X-x_b)/(x_c-x_b)
一个具有U1(x_b,z_b)= U1(x_a,z_a)= 0(因为x_a = x_b)和U1(x_c,z_c)= U1(x_d,z_d)= 1个
U2(X,Z)= 1 - U1(X,Z)
现在我们有U2 (x_b,z_b)= u2(x_a,z_a)= 1和u2(x_c,z_c)= u2(x_d,z_d)= 0
v1 z_b )
此功能满足V1(x_a,z_a)= V1(x_d,z_d)= 1和V 1(x_b,z_b)= V1(x_c,z_c)= 0
v2的(X,Z)= 1 - V 1(X,Z)
我们有V2(x_a,z_a)= V2(x_d,z_d)= 0和v 2(x_b,z_b)= V2(x_c,z_c)= 1
现在让我们来构建新的功能如下:
S_D(X,Z)= U1(X,Z)* V1(X,Z)
我们得到S_D(X_ (x,z)= u1(x,z)* v2(x,z_d)= 1和S_D(x_a,z_a)= S_D(x_b,z_b)= S_D(x_c,z_c)= 0
S_C ,Z)
我们得到S_C(x_c,z_c)= 1和S_C(x_a,z_a)= S_C(x_b,z_b)= S_C(x_d,z_d)= 0
S_A(X,Z)我们得到S_A(x_a,z_a)= 1和S_A(x_b,z_b)= S_A(x_c,z_c)= S_A(x_d,z_d)= u2(x,z)* v1(x,z)
= 0
S_B(x,z)= u2(x,z)* v2(x,z)
我们得到S_B(x_b,z_b)= 1,S_B(x_a,z_a)= S_B(x_c,z_c)= S_B(x_d,z_d)= 0
现在定义插值功能
^h (x,z)= h_a * S_A(x,z)+ h_b * S_B(x,z)+ h_c * S_C(x,z)+ h_d * S_D(x,z),
其中h_a是在A点高度,h_b点在B点的高度,依此类推。
你可以很容易验证H是确实是一个内插函数:
H(x_a,z_a)= h_a,数组H(x_b,z_b)= h_b,H(x_c,z_c)= h_c和H(x_d ,z_d)= h_d。现在
,以近似P点的高度,所有你需要做的是在这一点上评价H:
h_p = H(x_p,z_p)
功能S被通常称为作为“形状功能”。对于希望插值取决于的每个节点,都有一个这样的函数,在这种情况下,它们都满足Kronecker的delta属性(它们在一个节点取值1,在其他所有节点取值为零)。
有很多方法可以为给定的一组节点构建形状函数。如果我没有记错的话,通过乘以一维形状函数(正如我们在这种情况下所做的那样)构造2D形状函数称为“函数的张量积”(在这种情况下容易,因为网格是矩形的)。我们结束了四个函数(每个节点一个),它们都是{1,x,z,xz}的线性组合。
如果您只想使用三个点进行插值,那么您应该能够轻松地构建三个形状函数,只是{1,x,z}的线性组合,但是您将失去25%的高度当h_b!= h_d时,网格提供的信息和插值在矩形内不会平滑。
这是重心坐标测试吗? – tzenes 2010-03-22 17:29:21
如果ABC和ADC是独立的三角形,或者是否希望实际插值四边形ABCD,您是否想获得点P的高度值?两种操作都没有给出相同的结果。 – Coincoin 2010-03-22 17:31:20
我想要做的是首先确定哪个三角形P在,然后插入与ABC或ADC点相关的高度。 – fastrack20 2010-03-22 17:43:23