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

第4讲 南望方邑 —— 正方形边长的间接测量

不知道城邑有多大?站在北门外的树和西门外的观测点,用相似三角形就能算出正方形城邑的边长。这是一道巧妙的面积反推题。

白话翻译

今有邑方不知大小,各中开门。出北门三十步有木,出西门七百五十步见木。问邑方几何?

答曰:一里。

术曰:令两出门步数相乘,因而四之,为实。开方除之,即得邑方。


这道题说的是什么

前两题测的是"高度"——岛高、山高、树高。

这一题换了一种思路:测宽度

想象一下:有一座正方形的城邑,四面都有城门,我们不知道这座城到底有多大。但是在城的北门外面三十步有一棵树,在城的西门外面七百五十步有一个观测点,从这个点正好能看到那棵树。

问题就是:这座城的边长是多少?

你可能觉得很奇怪——明明看不到城的范围,怎么就能知道城有多大呢?

刘徽给出的答案很简洁:一里,也就是三百步。

更神奇的是他的算法——"两出门步数相乘,因而四之,为实。开方除之"。翻译成现代公式就是:

邑方=4×北出门×西出门\text{邑方} = \sqrt{4 \times \text{北出门} \times \text{西出门}}

代入数字:4×30×750=90000=300\sqrt{4 \times 30 \times 750} = \sqrt{90000} = 300 步 = 1 里。

为什么两个"步数"相乘再开方,就能得到城邑的边长?这就是我们接下来要讨论的。


示意图

南望方邑示意图

正方形城邑(俯视),北门外的树与西门外的观测点通过城角相连。

图怎么画出来

这道题是个有趣的几何谜题——题目说站在西门外,能看到北门外的树。视线必须擦过城的某个角落才能看到。

根据题目的数字,我们可以证明:视线恰好擦过城的西北角(也就是北门和西门所在的那一边相交的角)。

具体来看:设城边长为 a=300a = 300 步,北门在北边的中点,树在北门外 30 步处;西门在西边的中点,观测点在西门外 750 步处。

我们可以验证三点共线:

  • 北门中点:(a/2,a)(a/2, a),即 (150,300)(150, 300)
  • 树:(150,300+30)=(150,330)(150, 300 + 30) = (150, 330)
  • 西北城角:(0,a)=(0,300)(0, a) = (0, 300)
  • 西门:(0,a/2)(0, a/2),即 (0,150)(0, 150)
  • 观测点:(750,150)(-750, 150)

从观测点到树的连线,斜率为 330150150(750)=180900=15\dfrac{330 - 150}{150 - (-750)} = \dfrac{180}{900} = \dfrac{1}{5}

从观测点到西北城角:斜率为 3001500(750)=150750=15\dfrac{300 - 150}{0 - (-750)} = \dfrac{150}{750} = \dfrac{1}{5}

两斜率相同——三点共线。观测点、西北城角、树,恰好在一条直线上。

这就是"出西门七百五十步见木"的几何含义。


古人的算法解读

术曰说:"令两出门步数相乘,因而四之,为实。开方除之,即得邑方。"

翻译过来就是:

邑方2=4×北出门步数×西出门步数\text{邑方}^2 = 4 \times \text{北出门步数} \times \text{西出门步数} a2=4×30×750=90000a^2 = 4 \times 30 \times 750 = 90000 a=90000=300 步=1 里a = \sqrt{90000} = 300 \text{ 步} = 1 \text{ 里}

跟答案完全一致。

但这背后是为什么?两扇门出去的步数,怎么会相乘开方就得到城边长呢?


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

我们用相似三角形来推导。

设城邑为正方形 PQRSPQRS,边长为 aa

  • PP 为西北角,QQ 为东北角,RR 为东南角,SS 为西南角
  • 北门在 QRQR 的中点 MMNN 为北门外的树,MN=b=30MN = b = 30
  • 西门在 PSPS 的中点 KKLL 为西门外的观测点,KL=c=750KL = c = 750

关键几何关系:视线从 LL 出发,擦过城角 PP,恰好到达 NN。也就是说,LLPPNN 三点共线。

相似三角形示意图

从图上可以看出两对相似直角三角形:

第一对LKPPMN\triangle LKP \sim \triangle PMN

  • LKP=PMN=90°\angle LKP = \angle PMN = 90°(因为城是正方形,边是水平和竖直的)
  • LPK=PNM\angle LPK = \angle PNM(因为 LLPPNN 共线,内错角相等)

所以 LKPPMN\triangle LKP \sim \triangle PMN(AA 相似)。

由此得到比例关系:

LKPM=KPMN(1)\frac{LK}{PM} = \frac{KP}{MN} \qquad (1)

其中:

  • LK=cLK = c(西出门步数)
  • MN=bMN = b(北出门步数)
  • PM=a/2PM = a/2(城边长的一半,因为 MM 是北门,PP 是西北角)
  • KP=a/2KP = a/2(同理)

代入:

ca/2=a/2b\frac{c}{a/2} = \frac{a/2}{b}

交叉相乘:

c×b=(a2)2=a24c \times b = \left(\frac{a}{2}\right)^2 = \frac{a^2}{4} a2=4bc(2)a^2 = 4bc \qquad (2) a=4bc(3)a = \sqrt{4bc} \qquad (3)

这正是刘徽的术文!两出门步数相乘再乘以四,开方就是邑方。

代入数字验证:

a=4×30×750=90000=300 步a = \sqrt{4 \times 30 \times 750} = \sqrt{90000} = 300 \text{ 步} =1 里= 1 \text{ 里}

完美对上。


这道题的精妙之处

这道题比前两题都更有意思,因为它的观测方式完全不同

前两题都是"立表后退"——人拿着杆子往后退,用视线的角度差来算距离。这道题没有立表,也没有人动来动去——而是利用了一条天然的几何关系:从西门外看,视线刚好擦过城的西北角,看到北门外的树。

换句话说,题目隐含了一个"三点共线"的条件:观测点、城角、树,三点在一条直线上。

而正是这个共线条件,构造出了两对相似三角形,解出了城边长。

这种思路在数学上叫"构造相似"——不是直接测量,而是利用已有的几何关系,把未知量转化成已知的相似比。


跟高中数学的关系

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

相似三角形的判定与性质 + 比例线段

具体来说:

  • AA 相似判定:两个角对应相等,两三角形相似
  • 相似三角形对应边成比例
  • 比例的基本性质:若 ab=cd\dfrac{a}{b} = \dfrac{c}{d},则 ad=bcad = bc

这道题如果放在高中数学的"解三角形"章节,是一道非常经典的"间接测量"问题——你不需要走到城边上去量,只需要站在西门外、站在北门外,利用视线共线这个条件,就能算出城的大小。


思考与拓展

  1. 这道题里,为什么视线恰好擦过西北角?能不能擦过其他角? (提示:试着把西北角换成东北角,看看比例关系还成立吗?)

  2. 如果城不是正方形,而是长方形(东西宽、南北窄),同样的观测方法还能用吗?需要补充什么条件? (提示:两个方向出门的步数,分别对应不同的边长,这时候会有几个未知数?)

  3. 刘徽的术文说"开方除之"——你知道古代人是怎么开方的吗? (提示:中国传统的开方术,最早可以追溯到《九章算术》,用的是类似"长除法"的逐位逼近算法。)

  4. 你能不能用这道题的方法,反过来设计一个问题:已知城邑边长和北门外的树,问观测点应该站在西门外多远的地方才能"见木"?


一句话总结

两个方向出门的步数相乘再乘四,开方就是正方形城邑的边长——三点共线构造相似三角形,是这道题的几何灵魂。

— Y. · 2026-08-25