- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
LTI的C实现
层析成像
—LTI射线追踪及C++实现
姓名: XX
学号:XXXXXXXX
成都理工大学
2011,11,10
简介:
线性插值射线追踪又称LTI。首先把要计算的模型划分成等正方形的象素,在每个象素边界上确定出若干个计算点。假设边界上任一点的旅行时是该边界上相邻两离散点旅行时的插值。
向前处理:计算象素边界上各个离散点旅行时;
向后处理:根据费马原理追踪射线路径。得到满足最小旅行时条件下与象素边界交点的一条射线路径。在象素内的每条路径总是直线,同时象素边界处的射线折射角随入射角连续变化。
LTI是对有限差分射线追踪的改进。
基本公式:
原理:
如图所示,假设A点和B点的旅行时TA和TB为已知,求射线与某一象素边界上AB段相交并到达对面边界上D点的旅行时TD
s是象素内的慢度
由线性假设得
)
根据费马原理,将式(4-1-22)
对r求导,得到D点最小旅行时和c点准确位置r
其中
约束条件 :
C++程序实现:
设计一个单元函数对应一个像素,该单元函数需要知道,A点的横纵坐标(xa.za),D点的横纵坐标(xd,zd),A点波场时间Ta,以及A点的上下两点B1,B2(B1在A点上方,B2在A点下方)的波场时间Tb1,Tb2,总共7个参数。
1,将公式(4-1-23)(4-1-24)编入函数。Ly等于A点纵坐标za减去D点纵坐标Zd。lx等于D点与A点的横向距离|xd-xa|。
2,先计算AB1段的最佳r值。
讨论r值
当r值大于|AB|时取r=|AB|。此时记TD1等于B1到D的直线走时加上B1点波场时。
当r值小于0时取r=0。此时记TD1等于A到D的直线走时加上A点波场时。
3,再计算AB2段的最佳r值。注意此时的ly等于负的上面的ly即zd-za。
同样讨论r,得出TD2。
4,在对比TD1,TD2的大小,选小的值为TD。
5,当 B1,A,B2在单元格上横向排列的时候。
ly等于D点横坐标见去A点横坐标。Lx等于D点与A点的纵向距离,|zd-za|。
所以在函数的要添加一个参数。我们令当这个参数为1是表示B1,A,B2同列,当参数为0时表示B1,A,B2同行。
其中C++中的声明:
double cell(double xa,double za,double xd,double zd,double TA,double TB1,double TB2,int n);//n=0表示AB1B2同行。
向前处理:
原理:
(1)计算激发点(SP)所在象素(“激发象素”)边界上各计算点的旅行时。计算公式为T=Sd,其中s是激发象素慢度,d是激发点至离散点的距离(见图a)。
(2)计算发射点像素所在列各像素边界上所有离散点的最小走时,并记录对应的次级源。
首先计算发射点像素之上,像素边界中离散点的走时,如图b所示。此时,仅考虑来自该像素下边界(即边界 ABC)上所有线段的射线。以 D 点为例,考虑从 AB 间射到 D 的射线,得到一个走时 T1,,再考虑来自BC 间射到 D 的射线,得到另一个走时 T2,根据费马原理,取 TD=min(T1, T2)作为 D 点的走时,并记录对应的射线路径与边界点的交点,作为点的次级源。得到该像素边界上各离散点的走时之后,向上逐个像素重复以上过程,最后得到发射点像素之上所有像素边界中各离散点的走时。对发射点像素之下的像素,也用类似的方法向下递推,这样便找到发射点像素所在列上各像素离散点的走时及对应的次级源。
(3)计算激发象素右侧一列各象素的旅行时。
①计算各象素水平边界上的各点的最小旅行时,如图 (c)所示.这时只考虑来自左边界各线段的射线。对任一象素来说,它的下边界是另一象素的上边界,这时取其中旅行时较小的一个。
②考虑来自各象素下边界上各线段的射线,计算象素上边界上各点的最小旅行时。同样,考虑象素上边界上各线段的射线,计算象素下边界上各点的最小旅行时,见图 (d)。通过①、②即求得该列所有象素水平边界上各点的最小旅行时。
③计算该列各象素右侧边界上各点的旅行时。如图(e),考虑来自该象素另外三边上所有线段的射线,计算右边界上各点的最小旅行时。
通过①、②、③就求得了激发象素右侧一列上所有象素边界点上的最小旅行时。
(4)重复上述步骤,直至最右边的列为止。
以上向前处理过程,均用公式(4-1-26)计算旅行时。
C++程序实现:
这里要设计一个函数包括三个部分。分别完成(1)(2)(3)的部分。需要知道炮点的位置(X0,Z0)两个参数。
1,计算炮点所在单元格的几个8个角点各自的波到时。
通过炮点所在位置,定位
文档评论(0)