|
这几天在计算地表温度变化引起的位移场,用到了以前写的一个计算海潮负荷的程序(海潮负荷只要积分海洋部分的球面,现在要积分陆地部分的球面)。写程序时用的是VC++,现在不用了,也不太好调试,废了很大劲,有些内容自己都忘了(现在想想写个说明文档是多么重要),所以又把以前的东西看了一些,发现一个“好”东西,跟大家分享一下。
在计算海潮负荷时,有时要用到近海的潮汐模型来替换全球的海潮模型,近海区域有时候不是那么规则,其边界通常是数字化的,比如是由一些节点连起来的一个多边形,这时候就需要判断积分区域是否在这个多边形内,如果在这个区域,用全球海潮模型计算时,就不能计算这部分的积分(因为要扣除这部分影响)。
怎么样判断一个点在一个面内,这就要用到复变函数中的柯西积分,
(1)
上式是一个围线积分(绕一个闭环,也就是多边形的边界,这里的编辑器没有积分号加个圈的符号),如果a在这个环内(积分核不是全域解析的,如果是解析的,积分就是0),积分值就等于2πi,如果不在则等于0,正好在边界线上则为πi。
把复数的实部和虚部显式地表示出来,即
,
(2)
则(1)可写为
(3)
上式积分中的前两项正好是一个全微分,因此围线积分是0(与路径无关,只和起点终点相关,起点即终点)。
因此只需要计算下式:
(4)
对于点正好在边界线上的情形是比较好判断的(如通过点到边界节点连线的斜率相等),这里就不详细介绍了,主要作内外判断。边界线实际是N个直线段连接而成。设这些点为
,
,...
围线积分就是在这些直线段积分再叠加,对于第j个点和第j+1个点组成的线段,
当时,
,
(4)式的值为
(5)
当时,线段的方程为
(6)
所以,(4)变成
(7)
这个积分需要判断分母中二项式的判别式的取值情况,将(7)写成简洁的形式
(8)
当时,
(9)
大于或相等的情形,可以参考数学手册,这里就不写了。因为从(4)式知道分母表示的是两点的距离,一定是大于0的(不包含点在边界的情形),并且A也是大于0的,所以判别式小于0(二项式没有=0的实根),其结果就是(9)式。
所以最后的结果就是叠加所有N个线段上的值,如果这个结果接近2π,说明点就在多边形内部;如果接近0就在外部。
其实,判断方法有很多种,这只是其中之一,有兴趣可以搜搜。
Archiver|手机版|科学网 ( 京ICP备07017567号-12 )
GMT+8, 2024-9-1 08:14
Powered by ScienceNet.cn
Copyright © 2007- 中国科学报社