






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