第二讲 望松 —— 怎么知道山有多高、树有多大?
山上长了一棵松树,你只在山脚下,怎么同时算出山高和松高?刘徽用"入表"的巧妙设计,三次观测就搞定。三望法的经典应用。
原典
今有望松生山上,不知高下。立两表齐,高二丈,前后相去五十步,令后表与前表参相直。从前表却行七步四尺,薄地遥望松末,与表端参合。又望松本,入表二尺八寸。复从后表却行八步五尺,薄地遥望松末,亦与表端参合。问松高及山去表各几何?
答曰:松高一十二丈二尺八寸;山去表一里二十八步、七分步之四。
术曰:以入表乘表间为实。相多为法,除之。加入表,即得松高。求表去山远近者:置表间,以前表却行乘之为实。相多为法,除之,得山去表。
这道题说的是什么
上一道题我们测的是海岛——一个大目标,整个岛峰是一个点。
这道题升级了:山上长了一棵松树,你不仅要测出山有多高,还要测出这棵松树本身有多高。
你可能会说:这有什么难的?先测山顶高度,再测树底高度,一减不就是树高嘛。
哎,问题就在这——你在山脚下的平地上,你只能看到树顶和树底,但你不知道"树底"对应的地面位置在哪。因为山是斜的,你看不见"树底下的地面"在哪里。
所以刘徽的方法是:只测树顶,通过"入表"的巧妙设计,把树高也算出来。
什么叫"入表"?就是你从前面的杆子看松树底部的时候,视线不经过杆顶了,而是从杆子上某一个高度穿过去。这个高度,就叫"入表"——进入杆子多少的意思。
太聪明了。就多了这么一个小小的观测,就能多算出一个未知数。
示意图
把题拆解一下
我们先理一理,这道题里你能观测到几个数据:
- 两根杆子,都是 2 丈高(20 尺)
- 两杆相距 50 步
- 从前杆后退 7 步 4 尺,看松顶,视线擦过杆顶
- 还是在同一个位置,看松树的底部,视线从杆顶往下 2 尺 8 寸的位置穿过去(这就是"入表二尺八寸")
- 从后杆后退 8 步 5 尺,看松顶,视线也擦过杆顶
注意:松底的观测只在前面那个点做了一次,后面那个点没做。为什么?因为不需要。有松顶的两次观测 + 松底的一次观测,就够了。
古人的算法
刘徽给的公式:
其中 = 表间, = 前表却行, = 后表却行。
是不是跟上一题的岛高公式结构很像?就是把"表高"换成了"入表"。
我们来算一下(统一用尺做单位方便计算):
- 表高 丈 尺
- 表间 步 尺(1 步 尺)
- 前表却行 步 4 尺 尺
- 后表却行 步 5 尺 尺
- 相多 尺
- 入表 尺 8 寸 尺
松高:
跟刘徽的答案完全一样!
山去表:
完美对上。
现代数学视角:为什么"入表"这么神奇?
为什么测一次"入表"就能算出树高?我们用相似三角形来看一看。
这道题里其实有三组相似关系:
- 从前面看松顶 → 松高 + 山高 相关
- 从后面看松顶 → 松高 + 山高 相关
- 从前面看松底 → 只有山高 相关
前两组跟上一题的岛高公式是一样的,能算出"松顶的总高度"(山高 + 松高)。
第三组只有一组观测,不够算山高——但是注意,我们不需要算山高的具体值。我们用"松顶总高"和"松底高度"两个式子相减,山高就消掉了,剩下的就是松高。
这就是"入表"的巧妙之处:它不是为了算山高,而是为了跟松顶的观测做差,把山高这个未知数消掉,直接得到松高。
具体来说,设山高为 ,松高为 ,山到前表距离为 ,表高为 ,入表为 :
看松顶(前表):
看松顶(后表):
看松底(前表):
用 (1) 减 (3):
哎,有意思——松高 和"入表" 成正比,比例系数是 。
然后再结合 (1)(2) 两式算出 ,代入进去, 就出来了。
你看,其实就是多了一次观测、多了一个比例关系,问题就解决了。刘徽的厉害之处在于:他不用列方程、不用解方程组,直接给你一个简洁的公式,照着算就行。
跟高中数学的关系
这道题对应的高中知识点是:
相似三角形的进阶应用 + 方程思想
这道题里有三个未知数(山高、松高、距离),但我们有三个条件,所以能解。这就是方程思想——有几个未知数,就需要几个独立的方程。
高中数学里的"测量问题"经常会遇到这种"不可到达的两个点之间的距离""底部不可见的高度"之类的问题,思路跟《海岛算经》是一模一样的:
- 不能直接测?那就多测几次
- 每多测一次,就多一个方程
- 方程够了,就能把未知数都解出来
这就是数学的力量——你不需要到现场,只需要在远处测几次,通过计算,就能得到你想要的答案。
三望是什么意思?
上一道题叫"二望"——观测两次。 这一道题叫"三望"——观测三次。
哪三次?
- 前表看松顶
- 后表看松顶
- 前表看松底
每多一次"望",就能多求一个未知数。《海岛算经》的 9 道题,从二望、三望到四望,难度层层递进。
到第九题"登山临邑",是四望——要测一座城的南北长和东西宽,得观测四次才行。
刘徽自己在序言里说:"度高者重表,测深者累矩,孤离者三望,离而又旁求者四望。"
意思就是:测高度用两根表,测深度用两个矩,情况复杂的要测三次,更复杂的(既要测远又要测宽)要测四次。
这个"望"的次数,本质上就是方程的个数。几百年前的古人,虽然没有"方程"这个词,但已经在熟练运用方程的思想了。
思考与拓展
-
这道题里,为什么看松底只需要在前表观测一次,后表不需要? (提示:我们的目标是求松高,不是求山高。松高跟山高是什么关系?)
-
如果要测一棵完整的树(你能看到树顶和树底,而且树长在平地上),你需要测几次?怎么测?
-
想象一下:如果山上不是一棵树,而是一座塔,塔分三层,你能不能想办法分别测出每一层的高度?需要观测几次?
-
生活中还有什么地方能用类似的方法?比如:
- 操场上的旗杆高度(你可以走近)
- 河对岸的树高(你过不去)
- 窗户里的画有多大(你进不去那个房间)
一句话总结
多加一次观测,就能多求一个未知数。古人的"三望""四望",本质上就是方程思想——用多个方程解多个未知数。