上期雜志,我們介紹了古代戰(zhàn)爭中的糧食運輸問題。本期,我們就來說另一個很有趣的問題:安營扎寨問題。
古代戰(zhàn)爭中,安營扎寨是一件非常重要的事情,每天行軍結(jié)束時,主將會帶著自己的隊伍尋找適合扎營的位置,然后派人在相應(yīng)位置做好標記,同時下達命令讓陸續(xù)到達的軍隊參照標記修建營地。營地建造質(zhì)量好壞可以直接反映出主將的統(tǒng)率能力、士兵的訓(xùn)練水平,乃至于這支軍隊的戰(zhàn)斗力?!度龂萘x》里就有提到,諸葛亮撤軍后,司馬懿看了諸葛亮撤軍后留下的營地遺址,就贊嘆說:“天下奇才也?!?/p>
古代軍營的修建是很考驗數(shù)學(xué)水平的,要做到“疏密有當”:營地內(nèi)各隊的位置要相對集中,使各級軍官能夠方便指揮;各隊之間又要保持一定距離,為調(diào)兵遣將留出通道。在兵力一定的情況下,過大的營地會讓各隊間空隙太大,產(chǎn)生防御漏洞,也不利于相互支援;過小的營地,則像一座只有兩條車道的城市,可能會在調(diào)兵時發(fā)生“堵車”,甚至沖亂其他隊伍。
鑒于安營扎寨是將領(lǐng)們的基本功,歷史上許多的兵書都有專門的篇幅來講解“營制”。兵書中先把營地分為幾種類型:方營、直營、三角營、圓營和偃月營;再講解扎營的過程和注意事項,有時也會提供一些參考數(shù)據(jù),比如營地橫豎的邊長、內(nèi)部面積等等。不過,絕大部分兵書沒有給出計算方法。到了明朝,一個名叫唐順之的人寫了一本叫《武編》的兵書,里面出現(xiàn)了一篇與眾不同的內(nèi)容:“下營算法”——教人用數(shù)學(xué)方法來計算安營扎寨!
也許有人懷疑:這是不是不通軍事的書生在紙上談兵呢?還真不能這樣說,因為這本書的作者唐順之堪稱“明朝第一學(xué)霸”!他寫八股文拿過全國第一,還帶兵打過倭寇,研究過數(shù)學(xué)。他提出的“下營算法”指的是通過士兵的人數(shù)算出營地的面積,進而算出營地的邊長、直徑等參數(shù)。
方營就是一個正方形的營地。營地面積是按照人員數(shù)量直接求出的,假設(shè)普通步兵人均占地面積是1平方米,則20000人的軍隊組成的方營,面積就是20000平方米。接下來就要計算出正方形營地的邊長,這在現(xiàn)代數(shù)學(xué)中叫作開平方。
直營就是長方形營地。算出營地需要的面積后,設(shè)置營地一邊的長度,做一個除法,就可以算出營地的寬度了。
三角營指的是等腰直角三角形的營地。它也是按人數(shù)計算出營地面積,將面積乘以2,然后按照方營算法開平方得出等腰直角三角形營地的直角邊長。
圓營的直徑計算方式是將營地面積乘以4/3,再按方營算法開平方求得圓營的直徑。這個4/3是怎么來的呢?這是因為古人使用的圓形面積計算公式是 S=(L×d)÷ 4 , L是圓的周長,d是直徑,于是可以得到: d×d =S× 4÷π 。
雖然祖沖之在公元5世紀就已經(jīng)把圓周率精確到小數(shù)點后7位,但在之后的一千多年里,人們?yōu)榱擞嬎惴奖?,視π?,所以前面的式子就變成了d×d=S×4÷3。這恰好就是唐順之給出的計算方法。
偃月營是一個半圓形營地,主要用于軍隊有山河屏障的情況下依托天險扎營防御。唐順之給出的算法是將算出的營地面積S乘上8/3后再開平方。這也很好理解,S是半圓的面積,2×S就是整個圓的面積,套用前面圓營的公式就可以得出半圓形營地的直徑,再乘以圓周率即為周長,除以2可得到半圓形營地的弧長。
好了,“下營算法”基本介紹完畢。實際上這里用到的數(shù)學(xué)知識并不是唐順之的首創(chuàng)。它的開方算法直接繼承于漢代《九章算術(shù)》的開方術(shù),各種面積計算知識也早就為古代數(shù)學(xué)家所熟悉。所以“下營算法”的內(nèi)容完全有可能在更早時就被人提出過。那么,這些數(shù)學(xué)手段對古代軍事起到過多大的作用呢?
答案很遺憾, 沒什么作用,除了唐順之外大概也沒人用過……原因有兩方面,一方面是,扎營需要考慮的因素太多,面積并不是唯一需要考慮的因素。
另一方面,則是古人的平均數(shù)學(xué)水平實在太差!以“下營算法”本身來說,雖然開方算法與面積公式都是正確的,可是在涉及小數(shù)的計算時,唐順之多次出現(xiàn)錯誤。有“明朝第一學(xué)霸”之稱的唐順之尚且如此,普通人更不必說了!例如偃月營,很多兵書都記載了相關(guān)的參數(shù),如下表所示。
其中:換算關(guān)系為1頃=100畝,1畝=240平方步,1步=6尺;圓周率 π 視為3。
在已知弧長和直徑的情況下,只需要計算乘除法和換算單位,可3本書給了3個不同的結(jié)果。有興趣的“小樹苗”可以自己計算一下,看看哪個結(jié)果更準確……