栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

C++三线性插值代码实现

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

C++三线性插值代码实现


已知目标点C周围8个整数点的某个属性值,欲求出内部O点的值
需要做7次一维线性插值

  • 4次线性插值得到 I 、 J 、 K 、 L I、J、K、L I、J、K、L
  • 2次线性插值得到 M 、 N M、N M、N
  • 1次线性插值得到 O O O

设 ( O − A ) = ( u , v , w ) (O-A) = (u,v,w) (O−A)=(u,v,w), u v w 就相当于权重

  • I = A + u ( B − A ) J = D + u ( C − D ) K = H + u ( G − H ) L = E + u ( F − E ) I = A + u(B-A)\J = D + u(C-D)\K = H+u(G-H)\L=E+u(F-E) I=A+u(B−A)J=D+u(C−D)K=H+u(G−H)L=E+u(F−E)
  • M = I + w ( L − I ) = A + u ( B − A ) + w ( E + u ( L − E ) − A + u ( B − A ) ) N = J + w ( K − J ) = . . . . M = I + w(L-I)=A+u(B-A)+w(E+u(L-E) -A + u(B-A)) \N = J+w(K-J)=.... M=I+w(L−I)=A+u(B−A)+w(E+u(L−E)−A+u(B−A))N=J+w(K−J)=....
  • O = M + v ( N − N ) = . . . . color{red}O = M+v(N-N)=.... O=M+v(N−N)=....
    这个公式内的点 I 、 J 、 K 、 L 、 M 、 N I、J、K、L、M、N I、J、K、L、M、N都用8个整数点A~H表示

O = ( 1 − u ) ( 1 − v ) ( 1 − w ) A + u ( 1 − v ) ( 1 − w ) B + ( 1 − y ) v ( 1 − w ) C           + u v ( 1 − w ) D + ( 1 − u ) ( 1 − v ) w E + u ( 1 − v ) w F + ( 1 − u ) v w G + u v w H color{red}O=(1-u)(1-v)(1-w)A+u(1-v)(1-w)B+(1-y)v(1-w)C\:::::::::+uv(1-w)D+(1-u)(1-v)wE+u(1-v)wF+(1-u)vwG+uvwH O=(1−u)(1−v)(1−w)A+u(1−v)(1−w)B+(1−y)v(1−w)C+uv(1−w)D+(1−u)(1−v)wE+u(1−v)wF+(1−u)vwG+uvwH

写成代码

// 三线性插值
// c[2][2][2] 就是8个整数点,A对应C[0][0][0],H对应C[1][1][1]
double trilinear_interp(double c[2][2][2], double u, double v, double w) 
{
	auto accum = 0.0;
	for (int i = 0; i < 2; i++)
		for (int j = 0; j < 2; j++)
			for (int k = 0; k < 2; k++)
				accum += (i*u + (1 - i)*(1 - u)) * 
						 (j*v + (1 - j)*(1 - v)) * 
						 (k*w + (1 - k)*(1 - w)) * 
						 c[i][j][k];
	return accum;
}
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/835930.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号