不.我会在你提到的帖子中使用这个公式.
编辑:
要详细说明这一点,你提到的帖子中提出的方法(在Reed Copsey的答案中称为闭合多边形方法)最终将点列表分成三角形并使用交叉积来计算它们的面积.根据描述多边形的点的排序(缠绕),它可以通过利用正面和负面区域而不进行三角测量.因为它利用正面和负面区域,这种方法不需要对构成四边形中每个三角形的线进行任何计算,并且四边形是否凸起并不重要.
也就是说,概念上更容易理解将四边形分解为两个非重叠三角形,并独立计算每个三角形的面积.这种方法也总能产生正确的结果.这种方法的复杂性在于决定哪一对相对顶点应该指定两个三角形之间的中断.如果你有一个非凸四边形并选择了错误的三角剖分,那么你最终会得到重叠的三角形(除非被考虑)会使区域结果偏斜.如果在计算这些三角形的区域时要小心,你会发现(特别是四边形的情况下)一个三角形总是包含在另一个三角形中.通过一些聪明,您可以使包含的三角形区域具有包含三角形区域的相反符号,这将再次产生正确的结果.
实质上,这两种算法是相同的.没有性能差异; 假设四边形由x0,y0,x1,y1,x2,y2,x3和y3指定.然后闭合多边形方法具有以下操作:
area = 0.5 * abs( x0 * y1 - x1 * y0 + x1 * y2 - x2 * y1 +
x2 * y3 - x3 * y2 + x3 * y0 - x0 * y3 )
Run Code Online (Sandbox Code Playgroud)
可以简化为:
area = 0.5 * abs( x0 * (y1 - y3) + x1 * (y2 - y0) + x2 * (y3 + y1) +
x3 * (y0 - y2) )
Run Code Online (Sandbox Code Playgroud)
这完全符合(统计*和's)12个操作.另一种方法,找到每个单独的三角形并采用交叉产品的工作方式如下:
x2_line = x2 - x0
y2_line = y2 - y0
area = 0.5 * abs( (x1 - x0) * y2_line + (y1 - y0) * x2_line +
x2_line * (y3 - y0) + y2_line * (x3 - x0) )
Run Code Online (Sandbox Code Playgroud)
这又可以简化为:
x2_line = x2 - x0
y2_line = y2 - y0
area = 0.5 * abs( y2_line * (x1 - x0 + x3 - x0) + x2_line * (y1 - y0 + y3 - y0) )
Run Code Online (Sandbox Code Playgroud)
这也适用于12个操作.完全相同的操作次数.
因此,最大的区别在于三角测量随后是跨产品区域计算更容易理解,因为它非常简单,而封闭多边形方法实际上只是相同的算法,但是优化并因此以不同的方式呈现.
总之,是的,你提到的帖子中的公式是你得到的最有效的公式,同时也是最简单的算法,当用不同的方式表示时.