四边形的面积

时间:2017-02-20 00:32:41

标签: c++ algorithm math

我在平面和目标区域 P 中有 n 个点。我试图找到四个点,其中一个区域是四边形的角,其区域最接近 P 。以下是 n = 5且 P = 30的示例:

  • 0,0
  • 10,0
  • 0,10
  • 10,10
  • 7,3

答案应该是30.0(最接近 P ,在这种情况下它是相等的。)

你有什么想法我怎么能这样做?我知道我可以使用Heron的公式计算每个四边形的面积,但我是否必须尝试每种组合或者是否有更短的方法?

2 个答案:

答案 0 :(得分:1)

你可以

  1. 获取具有所需顶点数和形状的单位/模板多边形。
  2. 为其添加乘法比例因子t,使其坐标看起来像

    0, 0
    10t, 0
    0, 10t
    10t, 10t
    7t, 3t
    
  3. 使用shoelace formula找出该区域,例如f(t)

  4. 求解缩放因子f(t) = 30.0的多项式方程t以及多边形的相关坐标。

  5. 这应该为您提供所需区域的多边形(30.0)。

    顺便说一句,我假设您知道多边形的形状,否则,(无限)有许多解决方案可以适合您的目标区域。

答案 1 :(得分:0)

总的来说,我无法想到一种能够改善所有可能的四边形上最坏情况迭代的算法。如果该区域与点扩散的区域相比较小,则可以使用quadtree排列来清除距离太远而无法形成合理四边形的点。但即使在那里你也要小心,因为有一个非常薄的四边形与远点可能只有正确的区域,所以你可能不得不让自己屈服于四次算法。

但你可以使用加速:当你有三个点时,找到相关三角形的面积,如果它大于abs(目标区域 - 目前为止的最佳区域),那么你就不要需要尝试第四点的任何值。

正如我在评论中提到的,对于四边形区域,您需要Bretschneider's formula,Heron是针对三角形的。