hui.liu 2023-12-23
Advent of Code 2023 Day 18 涉及到求多边形的面积问题,
了解到一个简单的算法:鞋带公式。
鞋带公式(Shoelace formula)也称为高斯面积公式或者测量员公式,可以用来
求解任意没有相交区域的简单多边形的面积。计算方法为逆时针选取多边形每个
顶点的坐标交叉相乘,像系鞋带一样,比如假设一个多边形的坐标点为
,计算公式则为:
.
为什么可以这样?一个简单直观的理解是把多边形的中心设定为原点 ,
每两个相邻的坐标点和原点就构成了一个三角形,这个多边形就是由这些三角形
构成的,而三角形的面积就是对应平行四边形面积的一半,这里如果用中学
的几何知识 底*高
来计算平行四边形面积,不太好推导出鞋带公式,而用基础的
线性代数知识来计算平行四边形面积就很好理解:从原点到坐标点构成了一个向量,
两个向量的叉积(cross product)
就是它们构成的平行四边形的面积。
这样,鞋带公式怎么来的就比较容易理解了。更详细的说明参考这个视频。
叉积的几何意义
为什么两个向量的叉积就是它们构成的平行四边形面积?正好可以回顾一下去年底学了几节
MIT 18.02: Multivariable Calculus
关于向量和矩阵的部分。
回到最基础的平行四边形面积的一半来计算三角形面积:

其中三角形的高是 。
我们把向量 旋转 90 度得到 :

其中 长度相等,所以
.
叫做点乘(dot product)。
点乘的几何意义
首先,二维向量的减法在图形上是这样的:

根据 the law of cosines:
(如果 是 就是勾股定理)
这就引申出了点乘的定义:
之前我们把向量 旋转 90 度得到

所以
从而,三角形的面积 =
得证。
以上,构成了鞋带公式的基础。