找到多边形面积的有效算法

时间:2013-08-26 08:38:31

标签: c++ math

我正在寻找最好的(计算二维多边形区域的有效算法(特别是三角形给定三点)。我在网上搜索,我找到了以下链接,但我仍然是我不确定它们在内存成本方面是否有效(因为我的网格很大)。 我想知道c ++中是否有任何技巧(我是c ++中的新手)可以应用于它们:

这是链接:

(计算器) How to determine if a point is in a 2D triangle?

http://www.softwareandfinance.com/Visual_CPP/Triangle_Area_Perimeter.html

值得一提的是,最终目标是找出一个点是否在多边形内(不在边界上)。

感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

Joachim Pileborg在评论中建议不需要该区域,但是忽略了这一点:有一种有效的算法确实需要一个中间值,恰好是2*Area

然而,在这种情况下,问题实际上是输入域:三角形网格。这意味着几乎每个顶点都与两个三角形相邻。它不像“点P位于边E的左边,所以它不在三角形T”。有一大组三角形T i ,其中一些位于左侧,一些位于右侧,一个直接位于给定边缘的两侧。

鉴于这种复杂性,您应该预处理网格。将其划分为一些可管理的块,例如16x16,并记下它所在的每个三角形。任何点P恰好位于一个块中,因此您需要测试1%的三角形(单个三角形可能位于多个块中,但平均值较低)。

(你很少需要只进行一次点到网格匹配,因此预处理是合理的。并且在你进行预先计算区域的时候。)