我们的应用程序允许用户跟踪由直线和圆弧组成的闭合曲线。这些闭合曲线可以在其内部具有孔,这些孔也由直线和弧形构成。像这样:
弧段和直线段的数量,位置,方向,直径和扫掠/角度是可变的。
如何计算闭合曲线内的区域,不包括孔的面积?我知道如何通过用一系列线段近似弧来完成这项工作。但有没有更好,更准确的算法呢?
答案 0 :(得分:4)
一般方法很简单:您所在地区的面积计算为外部轮廓的面积减去孔的面积。这会解决“漏洞”问题,因此我们可以忘记漏洞。
现在的问题是计算“广义多边形”的面积:一个伪多边形,其边缘是直线段或弧形。
普通的Shoelace formula会为您提供任何普通多边形的区域。但由于我们正在处理“广义多边形”,因为弧边缘,公式不能立即应用。
然而,Shoelace公式背后的基本思想也可以适应这种情况。
Shoelace公式基本上计算三角形OAB
的有符号区域的总和,这些三角形O(0,0)
由点A
和点B
和AB
构成。有问题的多边形。在这种情况下,区域的签名意味着当OAB
是逆时针三角形时该区域应为正,否则为负。有关多边形区域计算的工作原理的说明,请参见here。
为了使这个公式适应您的情况,您必须找到一种方法来计算“广义三角形”的有符号区域:伪三角形OAB
,其中OA
和{{1}是直段,而OB
可以是弧。这是一个非常简单的问题,可以完全解决。
这基本上就是你需要做的。整个问题被简化为一系列基本问题:计算上述“广义三角形”的符号区域。
答案 1 :(得分:1)
你有一个复杂的形状,你不能给它的区域。你需要做的就是把它分解成你可以给出区域的形状。我会建议矩形,三角形和三角形,其中一条边用圆弧代替。从顶部垂直工作,每次到达顶点时定义一条水平线,或者在斜率在正负之间变化的弧点上定义一条水平线。计算在连续水平线之间生成的所有形状的面积。
答案 2 :(得分:0)
看起来你必须找到多边形,圆形,椭圆形和弧形的区域。具有多边形的近似弧。除了弧形休息是直接的。如果您在GDI +中使用图形路径,则一个选项是采用多边形点形成图形路径。否则寻找曲线的多边形近似。 http://keisan.casio.com/ 可能使用GraphicsPath.PathPoints http://msdn.microsoft.com/en-us/library/system.drawing.drawing2d.graphicspath.pathpoints(v=vs.110).aspx
答案 3 :(得分:0)
我认为你有几种选择: