Download as pdf or txt
Download as pdf or txt
You are on page 1of 38

基于分层序列法和双重贪心算法的测线布设问题

摘要
多波束测深是近年来效率较高,精度较好的水体测深技术。在实际条件下合理且实
际地安排测线的布设方案能够大大提高测量效率,降低测量成本。本文从二维到三维,
从均匀分布到疏密分布,从抽象到具体,层层递进,通过建立多波束探测的几何模型及
使用层次序列法和结合二次贪心算法的遍历寻优来实现测线布设的优化问题。
针对问题一,本文建立了基于欧式几何的多波束测深几何模型。本文首先注意到了
倾斜坡面与题给重叠率定义中水平坡面的区别,提出了修正覆盖宽度的概念及相关计算
公式。在此基础上建立基于欧式几何的多波束测深几何模型,通过分析多波束换能器的
开角、坡度、测线距中心点处的距离、海水深度、覆盖宽度、相邻两条测线重叠率之间
的几何关系,求解得到所求多波束测深均匀布设测线时的覆盖宽度及相邻条带之间重叠
率的数学模型
针对问题二,本文通过取截面,在立体模型中抽象出问题一的平面模型,再寻找出
沿测线的实际坡度角和垂直于测线的实际坡度角,对问题一种的覆盖宽度模型进行修
正,从而求解得到所求多波束测深覆盖宽度的数学模型。
针对问题三, 本文根据实际可操作性、政府规程、过往研究等认为测线应按照非均
匀平行直线布设。接下来本文先通过重叠率指标计算发现测线与东西向水平线的夹角
大于 87°,进一步通过放缩和降维抽象处理,通过几何关系证明得到当测线平行南北
方向时为该题前提下的最优布设方案。最后,根据覆盖率最小为 10%,计算可得最优
方案中每条测线到待测海域最西边的距离为 [358.52, 950.54, 1496.13, 1998.9, 2462.23,
2889.22 ,3282.7, 3645.31, 3979.48, 4287.43, 4571.22, 4832.74, 5073.75, 5295.85, 5500.52,
5689.14, 5862.96, 6023.15, 6170.76, 6306.8, 6432.16, 6547.69, 6654.15, 6752.27, 6842.68,
6926, 7002.79, 7073.55, 7138.76, 7198.85, 7254.23, 7305.26, 7352.29, 7395.63]。
针对问题四,首先,基于 Clough-Tocher 分割的三角域曲面插值算法,根据题给先
验地形拟合出待测海域海底地形。其次,借鉴问题三,采用弱化的分层序列法,以重叠
率和覆盖率为双第一目标,以测线总长度为第二目标,将三元优化问题拆分成两次优化
问题的叠加。接下来,对任意一个测线夹角取值,进行第一次贪心算法,逐测线布设,
得到该夹角对应的最优解。此后,以一定较小间隔遍历 0-180° 的夹角值,尝试熵权法对
每个方案进行评估后利用主观赋权法,寻找有限方案中的最优解。最后,在该解的领域
内进行第二次贪心算法,进一步得到更优的测线布设方案, 其测线的总长度为 145.22m;
漏测还去站综待测海域面积的 24.49%;在重叠区域中,重叠率超过 20% 的部分的总长
度为 9.18m。
最后,本文对模型进行了灵敏度分析,客观地指出了所用模型的优缺点,认为该模
型有较好的应用价值和可推广性。

关键字: 二次贪心算法 分层序列法 古典几何 测线布设 多波束测深

1
一、 问题重述

1 . 1 问题背景

声波测深是 20 世纪初发明的利用声波进行水体深度测量的技术。利用声波在均匀
介质中匀速直线传播,并且在不同界面上发生反射的原理,测量船向海底发射声波信号
并接受其反射信号,通过声波在水中的传播速度和传播时间可计算水体深度。相比于传
统的麻绳、钢琴丝测深,声波测深的方法更高效、精准;相比于卫星的电磁波测距,声
波测深可以在小范围内得到更精确的结果。
声波测深有单波束测深、多波束测深等多种具体方法。单波束测深工作原理如图 1a所
示,其测量结果仅沿航迹分布,效率较低。多波束测深工作原理如图 1b所示,可以测
量出以测线为轴且具有一定宽度的全覆盖水深条带,效率较高。在实际多波束测深过程
中,若能根据先验地形,合理布设测线,便可在测量质量、测量效率、测量成本等多方面
实现优化。因此,多波束测深的测线布设问题具有广泛的研究价值和广阔的应用前景。

(a) 单波束测深的工作原理 (b) 多波束测深的工作原理

图1

1 . 2 问题重述

问题设置从二维到三维,从均匀分布到疏密分布,从抽象到具体,层层递进,并且
服务于同一个主题——如何实现对具体海底情况探测的多波束测线布设优化问题。
问题一 考虑一个与测线方向垂直的截面,在海底坡线为与水平面夹角已知的直线
的理想情况下,通过平面几何分析,建立多波束测深均匀布设测线时的覆盖宽度及相邻
条带之间重叠率的数学模型。
问题二 对于矩形待测海域,在海底情况为与与水平面夹角已知的坡面的理想情况
下,通过立体几何分析,计算测线均匀布设情况下不同测线方向的覆盖宽度,建立多波

2
束测深覆盖宽度的数学模型。
问题三 本题是一个在海底沿东西方向线性变化的理想模型下,以可完全覆盖整个
待测海域、相邻条带之间的重叠率满足 10%-20% 为两个约束条件,以测量总长度为目
标的优化问题。需要得到一个满足条件的,总测量长度尽可能短的测线布设方案。
问题四 本题提供了实际海域的先验地形:南北长 5 海里、东西宽 4 海里大小海域
的散点深度。在此基础上,需要以多波束扫描条带尽可能覆盖整个海域、相邻条带直接
的重叠率大于 20% 的部分尽可能少、总测量长度尽可能短为三个目标,提出测线布设
的优化方案。

二、 模型的假设

1. 假设多波束测深量过程中海平面高度不变
说明:测量时间较短,其间不考虑潮汐等对海平面高度的影响。
2. 假设在测量的水体内声波沿直线传播
说明:本题中所需测深的海底深度较小,且所求海域范围相对较小,因此可以认为
海水的密度变化可忽略不计,流动亦不产生影响,因此可把待测水体视为均匀介质,声
波始终沿直线传播。
3. 假设多波束换能器的开角以测量船所在点的铅垂线为镜面对称
说明:测量船的横摇和纵摇可能导致多波束换能器的方向便宜,但此误差较小,且
课通过校准减小误差,在本题中忽略不计。
4. 假设所有波束的反射信号都可以被成功接受,无需考虑
说明:多波束测深系统在换能器张角范围内发射的所有波束都可以在海底反射并由
接收换能器接收,从而测量出水深条带。
5. 假设测线可以不连续
说明:多波束换能器可以控制开关,测线只是需要测量时的航迹,在测线与测线间
的航迹不进行测量,测线不连续,不计入测线长度。
6. 假设测量船不能原地旋转
说明:无行驶里程的原地转圈对于测量船来说过于理想。且若测量船可以原地旋
转,则可以在没有增加测线长度的情况下测出一个圆形条带,并进一步覆盖整个待测海
域,与题意矛盾。
7. 假设测线是互相平行的直线
说明:在计算重叠率时用到了两条测线的间距,只有测线相互平行时才有间距可
言,而测线是直线更加符合实际操作的方便,简化了模型。
8. 假设重叠率的修正定义
说明:在海底非平面时,应修正测线重叠率的公式,考虑两条带在海平面投影的宽

3
度,更符合实际且方便计算。
9. 多波束换能器开角为 120° 保持不变
说明:问题四中并没有给出多波束换能器开角大小,基于前三问条件,本文认为第
四问中多波束环能转换器的开角大小也取 120°。

三、 符号说明

符号 意义 单位

θ 多波束换能器的开角 °

α 坡度 °

α′ 测线方向的坡度 °

α′′ 与测线垂直的方向的坡度 °

φ 测线与东西向水平线的夹角 °

d 相邻两条测线之间的距离 m

Li 第 i 条测线距中心点处的距离 m

Di 第 i 条测线对应的海水深度 m

Wi 第 i 条测线的覆盖宽度 m

W′ 两条相邻条带的修正覆盖宽度 m

C 重叠率超过 20% 的部分的总长度 NM

T 测线的总长度 NM

S 漏测海区的总面积 NM2

p 漏测海区占总待测海域面积的百分比

η 相邻条带之间的重叠率

k 海里与米的转换比,即 1852

注:以上为本论文中涉及的重要通用符号,对于少量具体问题中的具体符号会在使用时
进行解释。

4
四、 问题分析

4 . 1 问题一的分析

本题的核心为求解均匀布设的测线各自对应的海水深度、覆盖宽度,以及相邻两条
测线之间覆盖率的大小。因此,先建立对应的二维几何模型,分析多波束换能器的开角
θ、坡度 α、第 i 条测线距中心点处的距离 Li 、海水深度 D、覆盖宽度 W 、相邻两条测
线重叠率 η 之间的关系,从而建立多波束测深度覆盖宽度及相邻条带之间重叠率的数学
模型。
在求解重叠率的过程中,发现题给重叠率的定义仅适用于海底地形水平的情况。而
在本题海底有坡度的情况下,相邻两条测线对应的覆盖宽度不相同,并不能够用其中任
意一条测线对应的覆盖宽度去简单套用公式。因此,根据覆盖率的实际意义,提出海底
不平坦情况下的修正覆盖宽度 W’(具体计算方法详见“问题一的建模与求解”),并据
此进行相邻两条测线间的覆盖率计算及相应模型建立。

4 . 2 问题二的分析

问题二是问题一的立体化情况,并且加上了测线方向夹角这一变量。因此,本题的
关键是在三维立体图中找到垂直于测线的截面,以及所需变量在新几何模型中的表示。
通过建立立体几何模型,可以找到垂直于测线的截面,并且通过几何关系,得出实际坡
度大小 α’,从而计算不同测线方向夹角,不同行驶里程时的覆盖宽度。

4 . 3 问题三的分析

问题三在问题二构建的立体几何模型上设计测线方案,需要讨论测线是否为直线,
是否平行的问题。根据重叠率 η 求解公式中 d 为相邻两测线的定义,综合国土资源部发
布的《海洋多波束水深测量规程》[1] 以及多份相关研究 [2][3][4],再考虑到测线布设方
案的现实可操作性和效率性等因素,本文认为应提供非均匀平行布设的测线方案。
在满足待测海域全覆盖的前提下,考虑相邻条带之间的重叠率满足 10%-20% 这一
约束条件。可以发现,当测线平行于等深线时(即南北向分布),对于任意相邻两条等
深线,其重叠率的极差最小,为 0,重叠率为 10%-20% 这一约束条件较易满足;测线与
等深线夹角越大,对于任意相邻两条等深线,其重叠率的极差越大,重叠率为 10%-20%
这一约束条件越难满足。因此,经计算可得,测线与东西向水平线的夹角范围在 87°-90°
之间。此条件下可以通过几何证明当测线平行于等深线时为测量长度最短的最优方案。

5
4 . 4 问题四的分析

本题是一个三目标优化问题,借鉴问题三,采用弱化的分层序列法,将待测海域覆
盖率和降低重叠率超 20% 的长度视为双第一目标,将测线总长度视为第二目标,从而
实现降维,将多目标优化问题转化为双目标优化问题和单目标优化问题的叠加。
同问题三,本文依然采用非均匀平行的测线布设方案,并且对于每一种可能方案,
都使用贪心策略,尽可能覆盖待测海域同时尽可能减少重叠率超过 20% 的测线长度,先
布设第一条测线,再逐条自动布设后续测线直至方案完成。仅存在唯一自变量测线与东
西向水平线的夹角 φ,以及目标变量总测线长度。通过以一定间隔遍历 0-180° 的 φ,可
以得到每一个 φ 下的最优解。
接下来通过线性加权对于每一个方案进行评估,找到所有已有解中的最优解的 φ,
此后在其附近二次贪心搜索,进一步逼近全局最优方案。

五、 模型的建立与求解

5 . 1 问题一:二维模型的构建

首先建立相邻两条测线及其全覆盖水深条带所构成的几何模型(如图 2a所示)。

(b) 覆盖宽度示意图
(a) 问题一的几何示意图

图2

其中多波束换能器的开角 θ = 120°,坡度 α = 1.5°,相邻两条测线之间的距离


d = 200, 海域中心点出的海水深度 D0 = 70。
则可得第 i 条测线在该截面对应的海水深度

Di = D0 − Li ꞏ tan α (1)

如图 2b所示,对于任意一条测线,其覆盖宽度

W = |BP | + |P C| (2)

(其中 |BP | 表示测线投影点到覆盖宽度最左边的距离,|P C| 表示测线投影点到覆盖宽

6
度最右边的距离)
(注:本文对于覆盖宽度的理解为多波束所能覆盖到的海底坡面的宽度,而非其投影在
水平面上的宽度。此定义在后文不变。)
利用正弦定理,可以得到关系式:

sin( π2 − α − 2θ ) sin 2θ
= (3)
D |BP |

sin( π2 + α − 2θ ) sin 2θ
= (4)
D |P C|
由公式 (2)、 (3)、 (4) 可得:
θ 1 1
W = Dꞏ sin ( + ) (5)
2 cos(α + 2 ) cos(α − 2θ )
θ

接下来考虑两条相邻测线之间重叠率的求解。题给覆盖率公式 η = 1 − Wd 仅适用于
测线相互平行且海底地形水平的情况,对于实际海底不水平的情况,每条测线对应的覆
盖宽度不同,因而对于同一个覆盖区域可能求出不同的覆盖率。为解决这一问题,根据
覆盖率的实际意义提出修正覆盖率 W ′ :

图3 修正覆盖宽度示意图

如图 3所示,W ′ = (x1 + x2 ) cos α。由此可得的重叠率


d
η =1− (6)
W′

经检验可以发现,当相邻两条测线对应的全覆盖水深条带恰好不重叠时,利用上述公式
可得到 η = 0。因此,认为本文该对于覆盖宽度的修正操作合理且有效。

7
综上,本文完成了多波束测深的覆盖宽度及相邻条带直接重叠率模型的建立,得到
所求结果如 表 1 所示:

表1 第一题答案

测线距中心点处的距离/m -800 -600 -400 -200 0 200 400 600 800

海水深度/m 90.95 85.71 80.47 75.24 70.00 64.76 59.53 54.29 49.05

覆盖宽度/m 315.81 297.63 279.44 261.26 243.07 224.88 206.70 188.51 170.33

与前一条测线的重叠率/% —— 34.68 30.56 25.88 20.53 14.34 7.11 -1.46 -11.77

5 . 2 问题二: 三维模型的构建

根据覆盖宽度的定义,它存在于特定时刻时与测线方向垂直的截面中。因此取该截
面,发现此时沿测线方向的坡面斜率不再是 α,而是 α’;同理,截面上的坡面斜率变成
了 α”。根据几何关系(如图 4所示,其中 P 点为测量船位置,红色为测线方向,绿色三
角形为多波束示意图),可以得到:

cos βꞏ tan α = tan α′ (7)

sin βꞏ tan α = tan α′′ (8)

图4 实际坡度角求解示意图

为方便后续计算,本文统一单位为 m。根据 1 海里 =1852 米,可得 Li = kꞏli(其中


li 为以海里为单位的测量船距海域中心点出的距离),从而

D = D0 + Li ꞏtanα′ (9)

8
θ 1 1
W = Dꞏ sin ( + ) (10)
2 cos(α′ + 2 ) cos(α′ − 2θ )
θ

由此,本文完成了多波束测深覆盖宽度模型的建立,得到所求结果如表 2所示:

表2 第二题答案

测量船距海域中心点处的距离/海里
覆盖宽度/m
0 0.3 0.6 0.9 1.2 1.5 1.8 2.1

0 415.69 466.09 516.49 566.89 617.29 667.69 718.09 768.48

45 415.69 451.32 486.95 522.59 558.22 593.85 629.48 665.11

90 416.69 416.69 416.69 416.69 416.69 416.69 416.69 416.69

135 415.69 380.06 344.43 308.80 273.17 237.54 201.90 166.27


测线方向夹角/°
180 415.69 365.29 314.89 264.50 214.10 163.70 113.30 62.90

225 415.69 380.06 344.43 308.80 273.17 237.54 201.90 166.27

270 416.69 416.69 416.69 416.69 416.69 416.69 416.69 416.69

315 415.69 451.32 486.95 522.59 558.22 593.85 629.48 665.11

六、 问题三:理想条件下的最优方案

本题是一个以可完全覆盖整个待测海域、相邻条带之间的重叠率满足 10%-20% 为
两个约束条件,以测量总长度最短为目标的优化问题。接下来将从布设测线是否平行的
讨论、测线与等深线夹角范围的求解、测线与等深线平行为最优方案的证明三个部分去
给出最优方案。

6 . 1 测线布设设想的提出

本题对于测线布设没有具体要求,因此,从测线是否是直线、是否相互平行(即两
条相邻测线之间的距离不变)、测线间是否等距三点进行讨论。
结合实际情况,本文认为让测量船沿曲线精准行驶在技术上难度较高且成本也较
高,相比之下直线行驶较为现实。
另外,我国国土资源部发布的《海洋多波束水深测量规程》[1] 中提到“主测线一
般采用平行等深线走向布设”
。同时,
《多波束系统在长江航道测量中的测线布设方法研

9
究》[2]、《多波束测量测线布设优化方法研究》[3]、《极地海洋多波束测量测线布设系
统设计及实现》[4]《基于多波束测深系统的海南港北港水深测量应用》[5] 中的测线布
设均采用平行直线排布。
是否均匀分布并不影响现实可实现性,且合理安排的非均匀分布能够缩短总测量长
度,节约探测成本,提高探测效率。因此认为,应该采用非均匀平行直线布设的测线方
案,并通过先布设第一条主测线,再通过在要求范围内降低重叠率来寻找较优方案。

6 . 2 测线与东西向水平线夹角范围的求解

图5 夹角范围求解示意图

如图,考虑海域水深最浅的东面,若测线与等深线存在夹角,则在间距 d 一定时,
最小的覆盖宽度一致,由测线最浅处深度决定;最大的覆盖宽度由测线最深处深度决
定。而要使重叠率满足 10%-20%,则

1 − d
≥ 10%
Wmin
(11)
1 − d
≤ 20%
Wmax

解得
0.8Wmax ≤ d ≤ 0.9Wmin (12)

此时若夹角增大,在 Wmin 不变的情况下 Wmax 增大,则不等式更容易不成立。故可以


求不等式临界值,解出测线与等深线的夹角范围。而测线最深不低于图中的 l1、l2 所在
的深度,此时测线最浅处为 A、B 点,测线最深处为 C、D 点。C、D 点的深度可由 C、
E、A、F、G 之间的数学关系求得。记 A 点深度 D0 ,C 点深度 D1 , 测线与东西方向夹角
为 φ。海底情况南北对称,故只考虑 0° ≤ φ ≤ 90°

10
容易得到

sin φꞏ tan α = tan α′′ (13)


D0 = 110 − 2k tan α (14)
2k 2d
D1 = D0 + ( − ) tan α (15)
tan φ sin φ
D0 sin 2θ (D0 + d sin φ) sin 2θ
Wmin =( + ) cos α (16)
cos( 2θ + α′′ ) cos( 2θ − α′′ )
D1 sin 2θ (D1 + d sin φ) sin 2θ
Wmax = ( + ) cos α (17)
cos( 2θ + α′′ ) cos( 2θ − α′′ )

结合公式(12)进行放缩,可得 φ > 87°。

6 . 3 测线与等深线平行为最优方案的证明

接下来证明测线与等深线平行时可以实现总测量长度最短。

6 . 3 . 1 引理

引理:如图图 6,∠CAB=∠FAB(多波束测量左右对称)
,当 α’>α(即坡度更陡时)

|CE| > |DF |。

图6 引理示意图

证明如下:
根据问题一种对覆盖宽度 W 的求解可得
θ 1 1
W = Dꞏ sin ( + ) (18)
2 cos(α + 2 ) cos(α − 2θ )
θ

要证 引理,即证 W = f (α) 关于 α 单调递增。

11
于是对 W = f (α) 关于 α 求导,可得
θ θ θ θ θ
f ′ (α) == Dꞏ sin [tan(α + ) sec(α + ) + tan(α − ) sec(α − )] (19)
2 2 2 2 2
易得,f ′ (α) ≥ 0。因此 W 关于 α 单调递增,也即引理得证。

6 . 3 . 2 放缩简化:单边覆盖代替平面覆盖

当测线不平行于等深线时,若测量船仅在待测区域内行驶,则会有部分待测海域无
法全部覆盖(如图 7a所示),所以实际总测量长度会比仅在待测海域内航行长。因此用
仅在待测海域内航行的总测量长度来进行比较。

(a) 未完全覆盖 (b) 完全覆盖

图7

由于全覆盖待测海域的一条边是全覆盖整个待测海域的必要不充分条件,所以将问
题降维,仅以覆盖一条边来进行后续的证明。(此处将倾斜的测线所产生的覆盖面积放
大,认为其到边界即可覆盖其覆盖区域延长所对应的边界,如图 8所示)

图8 二维简化示意图

由于 87° < φ ≤ 90°,且追求覆盖浪费尽可能少(追求总测量长度最短所要求的),


所以倾斜的测线也会抵达上下边界。
当海底为水平平面时,不同的测线覆盖宽度相同,记为 W ,那么倾斜角度为 φ 的
W
测量角所覆盖的边界的长度为 sin φ ,覆盖完同一长度的边所需的条数水平:倾斜 =cos φ:

12
1。同时,对于每一条测线竖直测线长度:倾斜测线长度 =1:cos φ。因此,在海底为水
平平面的情况下,数值测线总长和倾斜测线总长在理论上是相等的。
但在问题三海底有坡度的条件下,倾斜测线方向的实际坡度为 α’,而 α’<α。由引
理可得,倾斜测线所对应的实际覆盖宽度 W ’<W ,所以需要更多条倾斜测线才能全覆
盖该边,也即倾斜测线的方案总测量长度会比竖直测线的总测量长度更长。
综上,测线平行于等深线布设为所求最优方案得证。

6 . 4 具体方案求解

伪代码 1: 具体方案求解思路
1 x← 局部优化初始值;
2 repeat
3 x← 下一条测线坐标;
4 向 ans[0, 1 · · · cnt − 1] 添加 x;
5 until x 超出边界;
6 输出 ans[0, 1 · · · cnt − 1];

6 . 5 方案展示

测线的坐标如表 3,可视化如图 9,求解出的测线密度随深度增大而减小,符合预


测。

测线编号 1 2 3 4 5 6 7 8 9

测线位置 358.522 950.547 1496.13 1998.9 2462.23 2889.22 3282.7 3645.31 3979.48

测线编号 10 11 12 13 14 15 16 17 18

测线位置 4287.43 4571.22 4832.74 5073.75 5295.85 5500.52 5689.14 5862.96 6023.15

测线编号 19 20 21 22 23 24 25 26 27

测线位置 6170.76 6306.8 6432.16 6547.69 6654.15 6752.27 6842.68 6926 7002.79

测线编号 28 29 30 31 32 33 34

测线位置 7073.55 7138.76 7198.85 7254.23 7305.26 7352.29 7395.63

表3 第三问测线坐标

13
图9 问题三答案

七、 问题四:实际条件下的较优方案

7 . 1 基于贪心策略的遍历寻优算法确定

本题是一个多目标优化问题,常见解法有穷举、贪心算法、启发式算法等。作为集
合问题,本题的变量具有连续性,若穷举则可能无限,显然不合适。而遗传算法、模拟
退火等启发式算法在求解过程中会收到初始解的影响,有一定几率错过最优解,虽然效
率较高但有一定风险。本题中涉及的测线布设问题无后效性,因此可以利用贪心算法进
行辅助求解。
因此,借鉴问题三,采用分层序列法,将待测海域覆盖率和降低重叠率超 20% 的长
度视为双第一目标,将测线总长度视为第二目标,并利用两次贪心算法进行遍历寻优。
首先,对任意一个测线与东西向水平线的夹角取值,第一次利用贪心算法,根据第
一目标逐条布设测线,直至待测海域几乎完全被覆盖。其次,以一定的小间隔,遍历
0-180° 范围内的多个 φ 取值,分别用贪心策略求该 φ 值下对双第一目标的最优解。接
着,建立三个目标的线性加权权重,确定对方案的评价体系,并对目前拥有的所有方案
进行评价,取其中评价最高的一种方案。最后,通过二次贪心搜索,在该较优方案附近
搜索更优方案,从而一步步逼近全局最优解。

7 . 2 目标函数和评价体系的确立

本题一共有三个评价指标,对应各有一个目标函数:

1. 多波束测深后海域未覆盖面积:S = si (其中,si 表示第 i 块未覆盖海区的面

14
积)

2. 重叠率超过 20% 的测线的总长度:C = ci (其中,ci 表示第 i 段重叠率超过
20% 的测线的长度)

3. 测线的总长度 T = ti (其中,ti 表示第 i 条测线的长度)
对于多目标优化问题,尝试采用熵权法的评价体系。
熵权法,EWM(the entropy weight method),是基于物理中信息熵的定义,客观地
为多指标评价的权重提供依据的方法。熵权法是客观赋权的方法,相比主观赋权法精度
较高客观性更强,具有较好的可操作性。
熵权法中的三个评价指标(依次对应 S、C、T)

X1 = {x11 , x21 , ..., xn1 }


X2 = {x12 , x22 , ..., xn2 }
X3 = {x13 , x23 , ..., xn3 }

(其中 xij 为第 i 个测线布设方案对应的第 j 个指标的值)将数据构建成 n 行 3 列的


矩阵 a, 根据以下公式将数据进行正向标准化处理:

max(xj ) − xij
yij = (20)
max(xj ) − min(xj )
求出熵值 e: ∑n
yij i=1 pij ln(pij )
pij = ∑n ej = − (21)
i=1 yij ln(n)
求出熵权 w:
1 − ej
w j = ∑3 (22)
j=1 (1 − ej )

并据此对各方案进行打分 s:

3
si = wj pij (23)
j=1

经熵权法得到的三个目标量的权重分别为 0.335200526183617,0.207677371739260,
0.457122102077123。
但就主观判断而言,三个目标的重要性先后顺序为:覆盖度 > 总测量长度 > 重叠率
大于 20% 的长度。显然熵权法得出的权重大小和主观判断不符。因此本文仅将熵权法
得到的权重作为参考,结合主观判断,得到新权重 ws : wc : wt = 0.8 : 0.12 : 0.08。根据
此权重可以得到每一个 φ 值对应方案的效益指数。

7 . 3 一次贪心算法求解单一方案

首先,基于 Clough-Tocher 分割的三角域曲面插值算法,根据题给先验地形拟合出


待测海域海底地形(如图 10所示)

15
图 10 拟合地形图

再建立基于水平面的平面直角坐标系 xoy,利用贪心策略进行一个在特定 φ 取值下


的较优方案的生成。具体方法如下:

(a) 夹角为锐角时的的布设示意图 (b) 夹角为钝角时的的布设示意图

图 11 布设示意图

如图 11所示,为覆盖尽可能多的待测海域面积,先布设靠近角落的第一条测线,其
满足条件为恰好覆盖到折角处,也即与角落处覆盖宽度为半径的圆相切时最优。接下
来,的每一条测线,都在上一条的基础上,先根据 10% 估计一个大致间距,再在其领域
内通过贪心算法,以多波束测深后海域未覆盖面积和重叠率超过 20% 的测线的总长度
为二元目标,采用 3:1 的权重设置,寻求一个对于单一测线的最优位置。直至布设完成。
(注:在本题中认为多波束换能器开角为 120°)
其伪代码如下:

16
伪代码 2: 一轮贪心算法思路
1 Function greedy(x,y,theta):
2 d← ∂y/∂l,其中 l 是由x,y,θ 确定的直线;
3 (xx, yy) ← 据 (x, y) 估测的合理测线位置;
4 weight ← 3 //设置权重;
5 if y==0 then
6 foreach x in U (xx) do
7 //下一条测线更短;
8 amount←S_overlapped+S_missed*weight;
9 更新 min(amount);
10 end
11 else if y==4 then
12 foreach x in U (xx) do
13 //下一条测线更长;
14 amount←S_overlapped+S_missed*weight;
15 更新 min(amount);
16 end
17 else if θ>90 and yy>4+5/tan(θ*factor) or θ ≤90 then
18 foreach y in U (yy) do
19 //下一条测线更长;
20 amount←S_overlapped+S_missed*weight;
21 更新 min(amount);
22 end
23 else
24 foreach y in U (yy) do
25 //下一条测线更短;
26 amount←S_overlapped+S_missed*weight;
27 更新 min(amount);
28 end
29 end
30 return min(amount);

17
7 . 4 二次贪心算法逼近全局最优方案

第一次贪心算法结束后,得到对于一个特定 φ 值的最优方案。接下来,本文通过以
一定较小间隔遍历 0-180° 范围内尽可能多的 φ,并生成对应最优方案。
对每个方案考察其三个目标函数的大小,可视化作图如图 12所示。
对每一个方案都根据我们的赋权计算其效益指数,如图 13所示:

图 12 目标函数的三维散点图 图 13 效益指数关于夹角的柱状图

图 14

从而可以得到 φ=74.1° 时取到暂时最优方案。对于该暂时最优方案,再用前文相近


的贪心策略,调整参数,更细致地进行领域遍历搜索,进一步搜寻得到全局最优解。

7 . 5 方案展示

最终,我们经过二次贪心算法得到一个帕累托最优解,其测线的总长度为 145.22m;
漏测还去站综待测海域面积的 24.49%;在重叠区域中,重叠率超过 20% 的部分的总长
度为 9.18m。具体方案示意图如图 15所示:

图 15 测线布设方案示意图

18
八、 模型的评价与推广

8 . 1 模型的优点

1. 经灵敏度分析可知,模型的输出方案关于部分外界参数有较好的稳定性,适用于
不同的现实环境。
2. 先通过一次贪心算法搜索遍历得到较优解,再通过第二次贪心算法优化得到更优
解,兼顾了求解的效率和方案的优异性。
3. 不同海底状况,不同海域大小都可以用此方法进行测线布设的方案设计,普适性
较好。

8 . 2 模型的缺点

1. 本方案做了很多理想化处理,有一定较小的概率错过全局最优解。
2. 本文分析中并没有把实际水体测量过程中众多外界变量如天气、洋流等考虑在
内,可能与实际情况有差异。

8 . 3 模型推广

本文提出的多波束测深的测线布设方法不仅可以用于海洋深度测量,同样适用于
江、河、湖的深度测量。同时对于现实中可能出现的测量船横摇和纵摇的问题,也可以
在本文模型的基础上增加校正参数来实现。
另外,结合二次贪心算法的遍历寻优算法也可以适当修改后应用于其他多目标优化
问题,有较大的推广性。

19
参考文献

[1] DZ/T 0292-2016. 海洋多波束水深测量规程.

[2] 叶 小 心 洪 德 玫 张 旭. 多 波 束 系 统 在 长 江 航 道 测 量 中 的 测 线 布 设 方 法 研 究.
中国水运. 航道科技, (52-55), 2017.

[3] 成芳 胡 成. 多波束测量测线布设优化方法研究. 海洋技术学报, 35(87-91), 2016.

[4] 王风帆 马永. 极地海洋多波束测量测线布设系统设计及实现. 海洋信息技术与应用,


38(158-162+186), 2023.

[5] 张楚琦. 基于多波束测深系统的海南港北港水深测量应用. 鄂州大学学报, 29(103-


105), 2022.

20
附录 A 问题三 C++ 代码

#include<bits/stdc++.h>
#include<math.h>
using namespace std;

const int WE=7408,NS=3704;


const double L_CONST=sin(60.0/180*M_PI)/sin(28.5/180*M_PI)*cos(1.5/180*M_PI);
int cnt;
double ans[50];

double depth(double x)
{
return 110-tan(1.5/180*M_PI)*(x-WE/2);
}
double x_right(double x)
{
return depth(x)*sin(60.0/180*M_PI)/sin(31.5/180*M_PI)*cos(1.5/180*M_PI);
}
double x_left(double x)
{
return depth(x)*L_CONST;
}
double find_x(double prev_x)
{
double prev=prev_x+0.9*x_right(prev_x);
return (prev+0.9*x_left(0))/(1+0.9*tan(1.5/180*M_PI)*L_CONST);
}

int main()
{
freopen("T3.txt","w",stdout);
double x,tmpx;
x=x_left(0)/(1+tan(1.5/180*M_PI)*L_CONST);
ans[cnt++]=x;
while(1)
{
x=find_x(x);
ans[cnt++]=x;
if(x+x_right(x)>=WE) break;
}
for(int i=0;i<cnt;i++)
cout<<ans[i]<<'\t';
cout<<endl<<"Total Length: "<<cnt*NS<<endl;
return 0;
}

21
附录 B 问题四 Python 代码

from scipy.interpolate import CloughTocher2DInterpolator


import numpy as np
import pandas as pd
from math import *

# 生成二维插值曲面
df = pd.read_excel('input.xlsx')
z0 = df.values
Y = []
X = []
Z = []
for i in np.arange(0, 5.02, 0.02):
for j in np.arange(0, 4.02, 0.02):
X.append(i)
Y.append(j)
for i in z0:
for j in i:
Z.append(j)
f = CloughTocher2DInterpolator(list(zip(X, Y)), Z)

factor = pi / 180
SUM_OVL = 0

def drc_drv(x, y, theta):


if x < 0.03:
x = 0.03
if x > 4.97:
x = 4.97
if y < 0.03:
y = 0.03
if y > 3.97:
y = 3.97
return (f(x - sin(theta * factor) / 200, y + cos(theta * factor) / 200) - f(x, y)) * 200

def out_of_range(x, y):


if x < 0 or x > 5 or y < 0 or y > 4:
return True
return False

def calc_less(xx, yy, x, y, theta):


if xx == x:

22
d = abs(yy - y) * sin(theta * factor)
elif yy == y:
d = -abs(xx - x) * cos(theta * factor)
else:
d = -xx * cos(theta * factor) + y * sin(theta * factor)
xi = xx
yi = yy
sum_mis = 0
sum_ovl = 0
a_ovl = 0
s_ovl = 0
while True:
xi = xi + 0.02 * sin(theta * factor)
yi = yi - 0.02 * cos(theta * factor)
xj = xi - d * cos(theta * factor)
yj = yi - d * sin(theta * factor)
if out_of_range(xi, yi) or out_of_range(xj, yj):
return [sum_mis, sum_ovl, a_ovl, s_ovl]
drv1 = drc_drv(xi, yi, theta - 90) / 1852
drv2 = drc_drv(xj, yj, theta + 90) / 1852
W = (f(xi, yi) / (1 / 3 ** 0.5 + drv1) + f(xj, yj) / (1 / 3 ** 0.5 + drv2)) / 1852
eta = 1 - d / W
if eta < 0:
sum_mis += 0.02 * (1 - W / d) * d
if eta > 0.2:
sum_ovl += 0.02
s_ovl += 0.02 * d * eta
if eta > 0:
a_ovl += 0.02 * d * eta

def calc_more(xx, yy, x, y, theta):


if xx == x:
d = abs(yy - y) * sin(theta * factor)
elif yy == y:
d = abs(xx - x) * cos(theta * factor)
else:
d = x * cos(theta * factor) + (4 - yy) * sin(theta * factor)
xi = x
yi = y
sum_mis = 0
sum_ovl = 0
a_ovl = 0
s_ovl = 0
while True:
xi = xi + 0.02 * sin(theta * factor)
yi = yi - 0.02 * cos(theta * factor)

23
xj = xi - d * cos(theta * factor)
yj = yi - d * sin(theta * factor)
if out_of_range(xi, yi) or out_of_range(xj, yj):
return [sum_mis, sum_ovl, a_ovl, s_ovl]
drv1 = drc_drv(xi, yi, theta + 90) / 1852
drv2 = drc_drv(xj, yj, theta - 90) / 1852
W = (f(xi, yi) / (1 / 3 ** 0.5 + drv1) + f(xj, yj) / (1 / 3 ** 0.5 + drv2)) / 1852
eta = 1 - d / W
if eta < 0:
sum_mis += 0.02 * (1 - W / d) * d
if eta > 0.2:
sum_ovl += 0.02
s_ovl += 0.02 * d * eta
if eta > 0:
a_ovl += 0.02 * d * eta

def calc_length(coords, theta):


length_sum = 0
for coord in coords:
x0 = coord[0]
y0 = coord[1]
y = []
if (tan(theta * factor)):
y = [1 / tan(theta * factor) * x0 + y0, -1 / tan(theta * factor) * (5 - x0) + y0, 0,
4]
y.sort()
length_sum += abs((y[2] - y[1]) / cos(theta * factor))
return length_sum

def calc_missed(coords, theta):


counter = 0
a1 = sin(theta * factor)
a2 = cos(theta * factor)
a3 = 3 ** 0.5 / 1852
size = len(coords)
for xi in np.arange(0, 5, 0.04):
for yi in np.arange(0, 4, 0.04):
l = 0
r = size - 1
fx = f(xi, yi)
for coord in coords:
if abs((coord[1] - yi) * a1 - (coord[0] - xi) * a2) < fx * a3:
counter += 1
break
# while l <= r:

24
# mid = (l + r) // 2
# if abs((coords[mid][1] - yi) * a1 - (coords[mid][0] - xi) * a2) < fx * a3:
# print(xi,yi,(coords[mid][1] - yi) * a1 - (coords[mid][0] - xi) * a2,fx,fx*a3)
# counter += 1
# break
# if - fx * a3 >= (coords[mid][1] - yi) * a1 - (coords[mid][0] - xi) * a2:
# l = mid + 1
# else:
# r = mid - 1
return 20 * (1 - counter / 12500)

# 搜索合适的下一条测线
def greedy(x, y, theta):
global SUM_OVL
d = drc_drv(x, y, theta + 90)
l = f(x, y) / 1852 / (d / 1852 + 1 / 3 ** 0.5)
if y == 0 or y == 4:
xx = x - l / cos(theta * factor) / 5 * 9
yy = y
if xx < 0:
yy = 4 + xx / tan(theta * factor)
xx = 0
if yy == 0 and x >= 5 or xx == 0 and yy <= 0:
return [-1, -1]
else:
xx = x
yy = y - l / sin(theta * factor) / 5 * 9
if yy < 0:
xx = yy * tan(theta * factor)
yy = 0
if yy <= 0 and xx <= 0 or yy == 0 and xx >= 5:
return [-1, -1]

min_amount = 1048576
min_x = xx
min_y = yy
addition = 0
weight = 3
if yy == 0:
for xi in np.linspace(xx - l, xx + l, 20):
if xi < 0 or xi > 5 or xi == x:
continue
tmp = calc_less(xi, 0, x, y, theta)
amount = tmp[0] * weight + tmp[3]
if amount < min_amount:
min_amount = amount

25
min_x = xi
min_y = yy
addition = tmp[1]
elif yy == 4:
for xi in np.linspace(xx - l, xx + l, 20):
if xi < 0 or xi > 5 or xi == x:
continue
tmp = calc_more(xi, 4, x, y, theta)
amount = tmp[0] * weight + tmp[3]
if amount < min_amount:
min_amount = amount
min_x = xi
min_y = yy
addition = tmp[1]
elif yy < 5 / tan(theta * factor) and theta < 90:
for yi in np.linspace(yy - l, yy + l, 20):
if yi < 0 or yi > 4 or yi == y:
continue
tmp = calc_less(0, yi, x, y, theta)
amount = tmp[0] * weight + tmp[3]
if amount < min_amount:
min_amount = amount
min_x = xx
min_y = yi
addition = tmp[1]
elif theta > 90 and yy > 4 + 5 / tan(theta * factor):
for yi in np.linspace(yy - l, yy + l, 20):
if yi < 0 or yi > 4 or yi == y:
continue
tmp = calc_more(0, yi, x, y, theta)
amount = tmp[0] * weight + tmp[3]
if amount < min_amount:
min_amount = amount
min_x = xx
min_y = yi
addition = tmp[1]
elif theta <= 90:
for yi in np.linspace(yy - l, yy + l, 20):
if yi < 0 or yi > 4 or yi == y:
continue
tmp = calc_more(0, yi, x, y, theta)
amount = tmp[0] * weight + tmp[3]
if amount < min_amount:
min_amount = amount
min_x = xx
min_y = yi
addition = tmp[1]

26
else:
for yi in np.linspace(yy - l, yy + l, 20):
if yi < 0 or yi > 4 or yi == y:
continue
tmp = calc_less(0, yi, x, y, theta)
amount = tmp[0] * weight + tmp[3]
if amount < min_amount:
min_amount = amount
min_x = xx
min_y = yi
addition = tmp[1]
SUM_OVL += addition
return [min_x, min_y]

# 粗略计算下一条的位置
# 对邻近的每一条:
# 选出更短的一条
# 每0.01NM计算一次重叠率
# 统计当前路线的品质参数(记得算上两边的空白)
# 得到最佳的一条,返回位置

MAXNUM = 2147483647
LENGTH = 191.317
THETA = 1.1
MISS = 2.7168
OVERLAP = 57.4
COORDS = None
weight1 = 46
weight2 = 33
weight3 = 21

for theta in np.arange(1.1, 1, 1):


cnt = 0
SUM_OVL = 0
A_OVL = 0
print(theta)
r0 = 3 ** 0.5 * f(5, 4) / 1852
if theta <= 90:
x0 = max(0, 5 - r0 / cos(theta * factor))
y0 = min(4, 4 - r0 / sin(theta * factor) + 5 / tan(theta * factor))
coords = [[x0, y0]]
else:
x0 = max(0, 4 * tan(theta * factor) - r0 / cos(theta * factor))
y0 = max(0, 4 - r0 / sin(theta * factor))
coords = [[x0, y0]]
while True:

27
coords.append(greedy(coords[cnt][0], coords[cnt][1], theta))
if coords[cnt + 1][0] == -1:
tlen = calc_length(coords[:-1], theta)
tmis = calc_missed(coords[:-1], theta)
tovl = SUM_OVL
print(tlen, tmis, tovl)
print(coords)
exp = tlen * weight1 + tmis * weight2 + tovl * weight3 # 需要调整比值
if exp < EXP:
EXP = exp
LENGTH = tlen
MISS = tmis
OVERLAP = tovl
COORDS = coords[:-1]
THETA = theta
break
cnt += 1

print(LENGTH)
print(MISS)
print(OVERLAP)
THETA = 1.1

def calc_overlapped(coords, theta):


result = 0
for i in range(1, len(COORDS)):
x = COORDS[i][0]
y = COORDS[i][1]
d = abs((x - COORDS[i - 1][0]) * sin(theta * factor)) + abs((y - COORDS[i - 1][1]) *
sin(theta * factor))
xi = x
yi = y
sum_ovl = 0
while True:
xi = xi + 0.01 * sin(theta * factor)
yi = yi - 0.01 * cos(theta * factor)
xj = xi + d * cos(theta * factor)
yj = yi + d * sin(theta * factor)
if out_of_range(xi, yi):
break
if out_of_range(xj, yj):
continue
drv1 = drc_drv(xi, yi, theta - 90) / 1852
drv2 = drc_drv(xj, yj, theta + 90) / 1852
W = (f(xi, yi) / (1 / 3 ** 0.5 + drv1) + f(xj, yj) / (1 / 3 ** 0.5 + drv2)) / 1852
eta = 1 - d / W

28
if eta > 0.2:
sum_ovl += 0.01
result += sum_ovl
return result
OVERLAP=calc_overlapped(COORDS,1.1)
weight1*calc_length(COORDS,THETA)+weight2*calc_missed(COORDS,THETA)+weight3*OVERLAP
EXP = weight1 * LENGTH + weight2 * MISS + weight3 * OVERLAP

print("EXP=",EXP)
for i in range(1, len(COORDS) - 1):
x = COORDS[i][0]
y = COORDS[i][1]
dexp = 0

if y == 4 or y == 0:
xi = x
yi = y
while True:
xi = xi - 0.001
if xi < 0 or xi < COORDS[i + 1][0]:
break
COORDS[i][0] = xi
COORDS[i][1] = yi
tlen = calc_length(COORDS, THETA)
tmis = calc_missed(COORDS, THETA)
tovl = calc_overlapped(COORDS, THETA)
new_exp = tlen * weight1 + tmis * weight2 + tovl * weight3
if new_exp <= EXP:
EXP = new_exp
LENGTH = tlen
MISS = tmis
OVERLAP = tovl
else:
COORDS[i][0] += 0.001
break
xi = x
yi = y
while True:
xi = xi + 0.001
if xi > 5 or xi > COORDS[i - 1][0]:
break
COORDS[i][0] = xi
COORDS[i][1] = yi
tlen = calc_length(COORDS, THETA)
tmis = calc_missed(COORDS, THETA)
tovl = calc_overlapped(COORDS, THETA)
new_exp = tlen * weight1 + tmis * weight2 + tovl * weight3

29
print(new_exp)
if new_exp <= EXP:
EXP = new_exp
LENGTH = tlen
MISS = tmis
OVERLAP = tovl
else:
COORDS[i][0] -= 0.001
break
else:
xi = x
yi = y
while True:
yi = yi - 0.001
if yi < 0 or yi < COORDS[i + 1][1]:
break
COORDS[i][0] = xi
COORDS[i][1] = yi
tlen = calc_length(COORDS, THETA)
tmis = calc_missed(COORDS, THETA)
tovl = calc_overlapped(COORDS, THETA)
new_exp = tlen * weight1 + tmis * weight2 + tovl * weight3
if new_exp <= EXP:
EXP = new_exp
LENGTH = tlen
MISS = tmis
OVERLAP = tovl
else:
COORDS[i][1] += 0.001
break
xi = x
yi = y
while True:
yi = yi - 0.001
if yi > 4 or yi > COORDS[i - 1][1]:
break
COORDS[i][0] = xi
COORDS[i][1] = yi
tlen = calc_length(COORDS, THETA)
tmis = calc_missed(COORDS, THETA)
tovl = calc_overlapped(COORDS, THETA)
new_exp = tlen * weight1 + tmis * weight2 + tovl * weight3
if new_exp <= EXP:
EXP = new_exp
LENGTH = tlen
MISS = tmis
OVERLAP = tovl

30
else:
COORDS[i][1] -= 0.001
break

print(COORDS)
print(LENGTH)
print(MISS)
print(OVERLAP)

附录 C 目标函数及得分

方案编号 未覆盖面积 重叠率> 20% 的测线总长度 测线总长度 得分


1 3.264 59.56 192.0002924 55.68720292
2 2.7168 57.4 191.3173714 53.70901371
3 2.76 56.9 190.3171879 53.25117188
4 3.0976 54.12 187.6378766 50.73925877
5 3.08 52.68 186.9613412 49.43561341
6 3.4192 50.66 182.9968606 47.59492861
7 3.4256 48.88 183.4403614 45.99768361
8 3.696 48.54 183.3863485 45.70466349
9 3.8576 46.26 180.3063253 43.62994325
10 4.064 45.14 180.0202433 42.62940243
11 4.264 43.02 177.1660391 40.70286039
12 4.4128 41.54 176.7841143 39.37448114
13 4.5872 39.46 173.9485355 37.48284536
14 4.7904 38.88 173.9087155 36.97060716
15 4.96 36.36 170.8853302 34.6808533
16 5.1232 35.8 170.8041559 34.18420156
17 5.2912 34.28 168.1006169 32.79756617
18 5.4976 33.72 168.0418967 32.30329897
19 5.6096 31.82 165.3303164 30.57178316
20 5.8496 31.46 165.3863943 30.26034394
21 5.9936 29.76 162.6815067 28.71049507
22 6.184 28.52 159.9197136 27.57639714
23 6.3664 28.14 159.8139435 27.24245943

31
24 6.5808 25.98 156.8843525 25.27988353
25 6.6704 25.94 156.9079375 25.24859938
26 6.9136 24.78 154.2699375 24.19037937
27 7.0576 24.22 154.0920082 23.69180008
28 7.1136 22.8 151.3734976 22.38941498
29 7.3408 22.16 148.6347263 21.79738726
30 7.4544 21.4 148.5802501 21.1185225
31 7.6288 21.5 146.1364497 21.1928045
32 7.7504 21.34 146.2500437 21.05602044
33 7.888 19.68 143.3751053 19.54015105
34 8.0576 19.88 143.5602855 19.73048285
35 8.1584 18.36 140.7452728 18.33937273
36 8.2368 17.08 137.9967532 17.16380753
37 8.392 16.62 138.0827641 16.75842764
38 8.4656 15.26 135.2347411 15.50962741
39 8.6384 15.24 135.493553 15.50285553
40 8.736 13.68 132.6429089 14.07522909
41 8.8288 13.14 132.8471677 13.59591168
42 8.912 12.34 130.1224096 12.8528241
43 9.0416 11.74 130.3359119 12.32143912
44 9.1248 10.26 127.5434352 10.96567435
45 9.36 9.3 124.7867464 10.08586746
46 9.416 9.8 125.1906297 10.5427063
47 9.4352 8.44 122.4973088 9.292733088
48 9.576 8.38 123.0900311 9.251700311
49 9.6528 7.56 120.5135393 8.491775393
50 9.7904 7.42 121.1840457 8.379360457
51 9.9552 6.8 118.697811 7.80473811
52 10.008 6.02 116.1550152 7.079950152
53 9.6624 5.74 117.0740391 6.819860391
54 9.552 5.18 116.87725 6.3083725
55 9.0272 5.86 119.3833299 6.919193299
56 8.7648 4.62 116.6530903 5.762770903

32
57 8.6224 4.4 115.5972177 5.547092177
58 8.3296 4.28 117.0683803 5.439163803
59 7.888 3.38 114.4013676 4.580413676
60 7.6688 4.02 117.540226 5.17684226
61 7.3872 2.6 115.5917995 3.865277995
62 7.1952 3.62 118.5517285 4.803277285
63 7.1216 2.34 116.879575 3.63087575
64 6.536 2.02 116.4767855 3.309567855
65 6.3904 2.16 118.7048274 3.450568274
66 6.2384 1.32 117.3022281 2.672942281
67 6.0656 2.14 121.0762292 3.440042292
68 5.8976 0.94 119.7564644 2.338444644
69 5.7952 2.04 123.8394978 3.364154978
70 5.4192 0.66 123.0629294 2.095589294
71 5.2544 2.08 131.359915 3.44831915
72 5.0736 2.66 134.3698027 3.991378027
73 5.1744 6.7 141.9841007 7.708561007
74 5.008 9.18 145.2244487 9.964644487
75 5.096 14.6 152.770738 14.92250738
76 5.104 21 158.6050655 20.74125066
77 4.8624 28.02 164.3174985 27.10429499
78 4.9664 39.86 175.4318479 37.87663848
79 5.1248 47.84 181.4862188 45.12710219
80 4.8768 58.94 192.4001073 55.21384107
81 4.728 73.88 204.5086904 68.7734869
82 4.8304 110.1 234.767957 101.6791996
83 5.0672 135 256.0793181 124.3141532
84 4.8016 162.98 281.4307694 149.7363877
85 4.3008 191.06 306.0725869 175.2297659
86 3.848 223.58 336.580347 204.7802035
87 3.4416 254.84 365.9555153 233.1876352
88 3.0384 280.66 392.2156549 256.6680765
89 0.4 314.52 431.8880059 287.4068801

33
90 0.2192 342.44 451.9356499 312.7263165
91 0.0592 346.1 465.0007082 316.1429671
92 0.12 348.94 472.5857766 318.7778578
93 0.3392 351.94 471.0695963 321.473656
94 0.624 347.2 470.6709661 317.2179097
95 0.952 341.96 470.4196846 312.5157968
96 1.6416 344.68 475.2103346 315.0461833
97 2.104 342.12 475.5481604 312.7686816
98 2.4752 343.82 481.0417827 314.3721778
99 3.1248 347.34 486.2396761 317.6246368
100 3.48 344.38 486.8871966 314.984872
101 4.0272 341.46 488.2860274 312.3982203
102 4.432 344.4 494.6397646 315.1279976
103 4.8672 348.6 501.3167675 318.9965277
104 5.3408 351.88 508.6413538 322.0454535
105 5.7584 355.5 515.8320061 325.3962401
106 6.0784 352.74 518.066856 322.9505886
107 6.464 356.86 525.7055464 326.7542555
108 6.8528 356.98 528.7454976 326.912095
109 7.32 361.34 537.182072 330.9438207
110 7.7472 360.02 540.6594806 329.8119548
111 8.12 360.26 544.9689686 330.0896897
112 8.5616 364.92 553.9297021 334.395377
113 8.6832 357.06 554.0841321 327.3290013
114 8.7456 363.38 563.8349348 333.1176293
115 9.152 360.46 568.7555004 330.559155
116 9.216 355.82 574.0584171 326.4393842
117 9.4368 356.46 579.3461196 327.0793012
118 9.2896 348.6 579.2809485 319.9972895
119 9.5152 354.06 590.5686295 325.0354463
120 9.36 352.7 594.9230905 323.8472309
121 9.3152 344.76 596.2196993 316.711957
122 9.4176 340.88 600.1330297 313.2642103

34
123 9.7184 340.02 608.0860043 312.58478
124 9.3728 328.34 608.7520863 302.0621609
125 9.5328 321.86 610.8727183 296.2593672
126 9.1136 312.56 616.4822666 287.9245027
127 9.0736 304.08 618.0139458 280.3058195
128 9.3552 289.02 618.4260815 266.7700208
129 9.0176 279.62 619.4883991 258.303764
130 8.5552 280.42 632.2379705 259.1281397
131 8.664 264.96 630.9762046 245.206962
132 8.2816 256.28 636.533693 237.4314169
133 7.8992 242.14 636.2165514 224.6831255
134 7.5264 228.74 636.2357034 212.604677
135 7.24 225.42 645.6106586 209.6961066
136 6.8752 212.76 645.7399826 198.2851598
137 6.5952 201.18 646.8722101 187.8604821
138 6.3072 194.78 652.6358664 182.1437187
139 6.0784 183.38 653.7489642 171.8834096
140 6.032 181.42 649.7979058 170.0775791
141 5.7888 170.72 645.8898903 160.3963389
142 5.4864 160.7 631.4538325 151.2188583
143 5.32 150.7 618.8962783 142.0849628
144 5.2256 145.7 612.457501 137.515855
145 4.7856 140.02 600.0862782 132.2581428
146 4.6848 135.58 589.6509939 128.1527499
147 4.3936 126.52 576.892931 119.8566093
148 4.2432 117.8 561.6715745 111.8488757
149 4.2384 112.88 548.9934209 107.2938542
150 3.912 108.84 536.4660967 103.516261
151 3.7424 99.88 521.0292499 95.2894125
152 3.5872 96.2 507.1645846 91.83100585
153 3.376 91.84 493.2722039 87.75752204
154 3.3088 84.92 477.3361702 81.3668017
155 2.992 80.5 461.5653436 77.21525344

35
156 3.0656 73.28 443.9051755 70.54433176
157 2.8048 70.2 428.9835067 67.61007507
158 2.672 66.48 413.0109648 64.09570965
159 2.5824 63.12 397.4272559 60.91139256
160 2.48 56.16 378.2756987 54.45075699
161 2.5392 53 361.1384796 51.4383448
162 2.5344 49.48 343.9025402 48.0977454
163 2.1552 281.92 493.0257338 258.7660173
164 2.1632 373.96 547.9614978 342.151775
165 1.9328 421.68 574.2725302 385.3513653
166 1.6528 462 595.6122209 421.8387622
167 1.5232 500.6 613.8994448 456.7551544
168 1.4288 524.96 623.9256998 478.774697
169 1.304 531.54 621.0955165 484.6621552
170 1.3024 539.88 620.2956553 492.1600766
171 1.1104 546.96 620.0854655 498.5203747
172 0.9024 549.6 621.3310078 500.8984301
173 0.5888 544.42 621.1041278 496.2184813
174 0.5904 546.16 621.4039103 497.7875591
175 0.4496 547.9 622.7659112 499.3601391
176 0.3168 542.12 620.3384232 494.1272242
177 0.184 543.22 621.1428281 495.1186283
178 0.1152 547.3 626.0779605 498.8365396
179 0.1024 547.86 629.0004118 499.3691241
180 0.2592 546.86 632.7064598 498.5140246

附录 D 问题四最终结果点坐标

交点编号 与 x 坐标交点 与 y 坐标交点


1 4.777422468 4
2 4.329574529 4
3 3.867296171 4
4 3.378716818 4

36
5 2.925495423 4
6 2.389458533 4
7 1.76707231 4
8 1.041410237 4
9 0.181272272 4
10 0 3.883749749
11 0 3.342868559
12 0 2.951572292
13 0 2.643432218
14 0 2.397169836
15 0 2.19109313
16 0 2.019376749
17 0 1.869769078
18 0 1.73905295
19 0 1.618594724
20 0 1.514536742
21 0 1.415783403
22 0 1.323721619
23 0 1.241044061
24 0 1.162692891
25 0 1.088788637
26 0 1.045914563
27 0 1.008203603
28 0 0.96752563
29 0 0.913391531
30 0 0.843221123
31 0 0.843897003
32 0 0.805310978
33 0 0.76617433
34 0 0.728682631
35 0 0.689734808
36 0 0.641234698
37 0 0.612133269

37
38 0 0.573252364
39 0 0.535601821
40 0 0.489089584
41 0 0.44863114
42 0 0.409177458
43 0 0.373612153
44 0 0.334860729
45 0 0.294821723
46 0 0.254411172
47 0 0.211441777
48 0 0.167852239
49 0 0.123527474
50 0 0.062763309
51 0 0.000495486

38

You might also like