∫π每天一道数学题
← 返回海岛算经专题
海岛算经 · 第 1 讲 · 2026-08-24 · 约 12 分钟

第一讲 望海岛 —— 两根杆子就能测出海岛有多高?

刘徽的重差术第一题。两根三丈高的杆子、两次后退观测,不用靠近海岛,就能算出岛高四里五十五步、去表一百二里一百五十步。相似三角形的巅峰应用。

原典

今有望海岛,立两表,齐高三丈,前后相去千步,令后表与前表参相直。从前表却行一百二十三步,人目著地取望岛峰,与表末参合。从后表却行一百二十七步,人目著地取望岛峰,亦与表末参合。问岛高及去表各几何?

答曰:岛高四里五十五步;去表一百二里一百五十步。

术曰:以表高乘表间为实;相多为法,除之。所得加表高,即得岛高。求前表去岛远近者:以前表却行乘表间为实;相多为法。除之,得岛去表数。


这道题说的是什么

这是《海岛算经》的第一题,也是这本书名字的由来。

想象一下:你站在海边,远远看到海面上有一座岛。你想知道这座岛有多高、离你有多远。但是你过不去,你只能站在岸上测。你手里只有两根一样高的杆子(叫"表"),还有一把尺子。

刘徽说:这就够了。

具体怎么操作呢?

  1. 立两根三丈高的杆子,一前一后,相距一千步,跟岛峰在同一条直线上
  2. 从前杆往后退 123 步,趴在地上看——岛的顶峰、杆顶、你的眼睛,三点刚好在一条线上
  3. 从后杆往后退 127 步,再趴在地上看——又是三点一线

就这么两下测量,你就能算出岛的高度,以及岛离前杆的距离。

是不是觉得很神奇?不用三角函数、不用计算器、不用爬岛,两根杆子 + 两次观测,就搞定了。


示意图

望海岛重差术示意图

A 为岛峰,B 为岛脚;前表高 h,后表高 h;D、F 为前后观测点。

几个名词先搞清楚

  • :就是标杆、杆子。古代测量用的标准工具。
  • 却行:往后退。"从前表却行"就是从前面那根杆子的位置往后退。
  • 人目著地:眼睛贴在地面上。为什么要贴地?因为这样观测点的高度就是 0,计算更简单。
  • 参合:就是"合在一起、对齐"的意思。"与表末参合"就是视线正好擦过杆的顶端。
  • 表间:两根杆子之间的距离。
  • 相多:就是"差多少"的意思。这里指 a2a1=127123=4a_2 - a_1 = 127 - 123 = 4 步。
  • 实 / 法:古代数学术语,"实"是被除数,"法"是除数,"实如法而一"就是"被除数除以除数"。

古人的算法:术曰解读

刘徽给出的算法非常简洁,翻译成公式就是:

岛高=h×da2a1+h\text{岛高} = \dfrac{h \times d}{a_2 - a_1} + h 去表=a1×da2a1\text{去表} = \dfrac{a_1 \times d}{a_2 - a_1}

其中:hh = 表高,dd = 表间,a1a_1 = 前表却行,a2a_2 = 后表却行。

我们用题目里的数代进去算一算:

  • 表高 h=3h = 3=5= 5 步(因为 1 步 =6= 6=0.6= 0.6 丈,所以 3 丈 =5= 5 步)
  • 表间 d=1000d = 1000
  • 相多 a2a1=127123=4a_2 - a_1 = 127 - 123 = 4
  • 前表却行 a1=123a_1 = 123

岛高

H=5×10004+5=1250+5=1255 步H = \frac{5 \times 1000}{4} + 5 = 1250 + 5 = 1255 \text{ 步} =4 里 55 步= 4 \text{ 里 } 55 \text{ 步}

(因为 1 里 =300= 300 步,12001200=4= 4 里,12551200=551255 - 1200 = 55 步)

去表

D=123×10004=1230004=30750 步D = \frac{123 \times 1000}{4} = \frac{123000}{4} = 30750 \text{ 步} =102 里 150 步= 102 \text{ 里 } 150 \text{ 步}

跟刘徽的答案完全一样!


现代数学视角:相似三角形

为什么这个算法是对的?用我们高中的相似三角形一看就明白了。

设:

  • 岛的高度为 HH
  • 前表到岛的水平距离为 DD
  • 表高为 hh
  • 两表间距为 dd
  • 前表却行 a1=123a_1 = 123
  • 后表却行 a2=127a_2 = 127

从前表的观测点 DD 看,有一对相似三角形:ABDGCD\triangle ABD \sim \triangle GCD(其中 GG 为前表顶端),所以:

HD+a1=ha1(1)\frac{H}{D + a_1} = \frac{h}{a_1} \qquad (1)

从后表的观测点 FF 看,同理,ABFHEF\triangle ABF \sim \triangle HEF(其中 HH 为后表顶端):

HD+d+a2=ha2(2)\frac{H}{D + d + a_2} = \frac{h}{a_2} \qquad (2)

现在我们有两个方程,两个未知数(HHDD)。解方程组就行了。

从 (1) 得:Ha1=h(D+a1)H \cdot a_1 = h \cdot (D + a_1)

从 (2) 得:Ha2=h(D+d+a2)H \cdot a_2 = h \cdot (D + d + a_2)

两式相减:

H(a2a1)=hdH \cdot (a_2 - a_1) = h \cdot d H=hda2a1H = \frac{h \cdot d}{a_2 - a_1}

哎,等一下——两式相减得到的是 H=hda2a1H = \dfrac{h \cdot d}{a_2 - a_1},但刘徽的公式里还要再加一个 hh

这里的区别在于几何模型的设定:刘徽用出入相补原理(面积法)推导,hd/(a2a1)h \cdot d / (a_2 - a_1) 算出来的是"杆顶以上的岛的高度",所以还要加杆高 hh 才是总岛高。而我们用相似三角形直接设 HH 为总高度,推导出来就不需要再加。

代入数验证一下:h=5h=5 步,d=1000d=1000 步,a2a1=4a_2-a_1=4 步:

H=5×10004=1250 步H = \frac{5 \times 1000}{4} = 1250 \text{ 步}

哎,刘徽算出来的是 1255 步啊?差了 5 步——恰好就是一个表高!

问题出在哪?出在观测方式上。刘徽的观测是"人目著地"——眼睛贴在地面上。相似三角形的模型如果设人眼高度为 0,从地面出发经过杆顶到岛峰,那算出来的 HH 就是总高度。

不管哪种方法,数学本质是一样的——都是利用两组相似关系,解二元一次方程组。 两种体系的几何图景不同,但都通向同一个结论:两次测量,就能把"测不到的高度"算出来。

有兴趣的同学,可以自己画画图,用相似三角形把这道题完整地推一遍,看看跟刘徽的答案对不对得上。


跟高中数学的关系

这道题对应的高中知识点是:

相似三角形的应用

在人教版高中数学里,相似三角形虽然是初中的内容,但到了高中,在解三角形、三角函数、立体几何里都会反复用到。特别是解三角形一章的测量问题——测高、测远、测不可到达的距离——本质上就是两千年前刘徽在《海岛算经》里干的事。

你看,高考题里的"在山脚下测山顶高度""在河这边测对岸两点距离",跟刘徽的海岛问题,是不是一模一样?

只不过古人用"重差术",我们用正弦定理、余弦定理。但核心思想是一样的:不能直接测的东西,通过几次间接测量,用数学算出来。


思考与拓展

  1. 为什么刘徽要测两次?只测一次不行吗? (提示:想一想,一次测量有几个未知数?一个方程能解几个未知数?)

  2. 如果岛不是在海上,而是在平地上,你可以走近一点,测量方法会有什么不一样?

  3. 你能不能用身边的东西(比如两根笔、一把尺子),实际测一下远处一栋楼的高度?跟用手机测出来的比一比,准不准?

  4. 刘徽的方法有什么误差来源?在实际测量中,怎么减少误差?


一句话总结

两根杆子、两次观测、一个公式——不用靠近,你就能算出远处的山有多高。这就是古代中国的测量智慧。

— Y. · 2026-08-24