重差方法是从测太阳高远发展起来的。西汉刘安《淮南子》便有这种方法的雏形。刘徽认为《九章》的测望对象都是端旁互见的没有超邈如太阳之类。他发展完善了重差术,在《九章算术注序》中指出“凡望极高,测绝深而兼知其远者必用重差、勾股,则必以重差为率”。概括出测日高、远的公式:在洛阳的平地南北方向上立两根表,高8尺。同一天中午测量两表的影子,“以景〔ying,同影〕差为法,表高乘表间为实,实如法而一。所得加表高,即日去地也。以南表之景乘表间为实,实如法而一,即为从南表至南戴日下也”。此即:日高=(表高×表间)/景差+表高,表至戴日下=(南表景×表间)/景差。
其中“表间/景差”是两个差之比,故称为重差术,如图24。戴日下即太阳直射大地之点。这两个公式基于天圆地方、大地为平面的盖天说,不符合实际,但在数学理论上是正确的。《海岛算经》第一问为测望一海岛的高远,其方法、公式与上述日高术完全相同,即所谓重表法。此岛高4里55步,合今1792.14米(以魏尺23.8厘米入算),距大陆的测望点102里150步,合今43911米。
图24 重表法
中国沿海无这样的海岛,笔者认为,刘徽是以泰山(1536米)为原型,假托成海岛,以成为端旁不可互见的对象。刘徽曾说:圆穹的天都可以测望,“又况泰山之高与江海之广哉?”事实上,上述数据比历代史籍关于泰山高度的记载都精确得多,也比清代学者用重差术的测望结果准确得多。
图25 连索法
连索法是重差术的另一种主要方法。《海岛》第3问是南望方邑,竖立两表,与人同高,东西距6丈,以索连之,使东表与城邑的东南角、东北角成一直线。从东表向北走5步,望城邑的西北角,入索东端2丈2尺6½寸,向北走13步2尺,恰恰与西表、城邑西北角成一直线,问邑方及表到城邑的距离是多少?如图25。刘徽先求:景差=(入索×后去表)/表矩,则:邑方=入索(后去表-前去表)/(景差-前去表),邑去表=前去表(后去表-景差)/(景差-前去表)
图26 累矩法
累矩法是重差术的又一主要方法。第4问是测望一深谷,将矩放在深谷的岸上,矩之勾高6尺,从勾顶端望谷底,入下股9尺1寸,又将此矩向上移3丈,从勾顶望谷底,入矩之股(称为上股)8尺5寸,问谷深多少?如图26,刘徽给出公式:谷深=勾矩×上股/股差-勾。
刘徽提出:“度高者重表,测深者累矩,孤离者三望,离而又旁求者四望。”(《九章算术注·序》)传本《海岛算经》除上述三个问题要二次测望外,第2、5、6、8四题要三次测望,第7、9二题要四次测望。中国的重差术到刘徽可谓大备,后来秦九韶等在测望方法上有所改进,但从数学理论上说,在明末西方数学传入之前,没什么新的突破。这些测望公式是怎么证明的,由于刘徽自注及图已失,不得而知,后人颇多探讨。有人认为用相似勾股形对应边成比例的原理,有人认为用面积出入相补原理,从中国的数学传统和当时的数学水平看,两者都是可能的。而刘徽注对复杂的问题,则常常是两者并用。