《显微镜下的大明》第一篇完结了,其中有几处提到了快速计算“妖田”面积的方法—推步聚顶之术。第14集还很贴心的配了动画演示。

富甲天下java 富甲天下3秘籍大全_顺时针

 

 

 网上已经有数学好的同学指出,所谓推步聚顶之术就是鞋带公式 (Shoelace formula),也叫高斯面积公式,可用于计算平面任意多边形面积。其原理就是向量叉乘计算三角形面积。

富甲天下java 富甲天下3秘籍大全_叉乘_02

 

 

 

富甲天下java 富甲天下3秘籍大全_富甲天下java_03

 

而四边形ABCD的面积可以由多个三角形面积加加减减得到。即三角形OAB+OBC-OCD-ODA。其中正负号的规律是原点O和多边形每个边两个顶点组成的三角形中,如果按顺时针排列两个顶点的方向和整个多边形顺时针排列时这两个点的方向不一致,那么该三角形面积要做减法。比如三角形ODC,在三角形内顺时针排列,方向是D到C,而整个四边形顺时针排列,方向是C到D。所以三角形ODC的面积是做减法。而非常美妙之处在于向量叉乘自身是带方向的,可以直接计算不用考虑加减问题。

所以:

富甲天下java 富甲天下3秘籍大全_富甲天下java_04

那么只要建立好坐标系,测量各顶点的坐标,即可得到多边形的面积。

我想作者设计这么一个推步聚顶的概念,可能就是觉得好玩,不必太认真。因为决定整个故事走向的并不是台词里所说的“算学的问题,回归算学本身”。

比如,剧中的妖田明显是曲边形,要用多边形近似表示,那需要尽量多的取“顶点”,才能保证数据准确。不理解的地方是,剧中明明李世达早早就带了测绘专家来,为什么非要男主小帅先用祖传算学说出结果,然后再派人丈量核实。如果这是官场的小猫腻的话,那细思极恐的地方是,不同的丈量人员用不同的方法,当天测量的实时数据和小帅多年前记忆的历史数据,结果居然是一样的,都是10亩6分,也就是偏差在1%内。就算都用推步聚顶的方法,同一批人员测量,原始数据也会有不同。先不说选的顶点会不一样,就是相同的顶点绳子测量结果的偏差也会很大。用绳子测长度,几十米的距离,怎么保证每次绳子绷紧的程度都是一致的,怎么保证每次都是严格垂直坐标轴的。更何况用不同的方法,偏差一定不会小。

那为什么两次结果会一致呢,我有个阴谋论的想法,就是李大人手下的那些人不过是装装样子,他们回来汇报时抄小帅的答案就行了。

富甲天下java 富甲天下3秘籍大全_顺时针_05

 

当然回归单纯的算学本身,要想不同团队的测绘殊途同归,结果一致,就要保证每一种方案本身都是正确的,而且精度要高。那关键点就不在算法的性能,而在于测量。比如尽量多的选取顶点以拟合曲边,再比如多次测算,取平均值。

假设取100个点的坐标为顶点,那计算量就是200次乘法,100次减法和100次减法。一个人1个小时完全可以搞定了。而实际测量100个点的工作量就是大头了,估计要3个人弄上一上午甚至更多。剧中没有明确说明“传统”的计算土地面积算法是什么,感觉就是割补法,把不规则图形切一切挪一挪,化为规则图形。这种方案在计算上可能会比推步聚顶慢一些。但在数据测量阶段的工作量应该和小帅的方案是一个数量级别。所以重新丈量土地,关键路径不在计算方法,而在于测量。这么说来,推步聚顶之术不太可能大幅度提升丈量土地的效率。但是该算法规则明确,便于标准化,的确是对付妖田的巧妙手段。