四边形的面积
Posted
技术标签:
【中文标题】四边形的面积【英文标题】:Area of a quadrilateral 【发布时间】:2017-02-20 00:32:41 【问题描述】:我在一个平面上有 n 个点和一个目标区域 P。我试图找到四个点,它们的面积是四边形的角,面积最接近 P。以下是 n=5 和 P=30 的示例:
0, 0 10, 0 0, 10 10, 10 7、3答案应该是 30.0(最接近 P,在这种情况下它是相等的)。
你有什么想法我可以做到这一点吗?我知道我可以使用 Heron 公式计算每个,但是我必须尝试每种组合还是有一些更短的方法?
【问题讨论】:
Heron 的公式适用于三角形,它自然扩展到四边形,称为 Brahmagupta 公式,仅适用于循环四边形,不适用于一般四边形。 你可以使用 Bretschneider 的公式。您需要使用一些触发器。 【参考方案1】:你可以
-
采用具有所需顶点数和形状的单元/模板多边形。
为其添加一个乘法比例因子t
,使其坐标看起来像
0, 0
10t, 0
0, 10t
10t, 10t
7t, 3t
使用shoelace formula 找出该区域,例如f(t)
。
求解多项式方程f(t) = 30.0
的比例因子t
和多边形的相关坐标。
这应该会为您提供所需区域的多边形 (30.0
)。
顺便说一句,我假设您知道多边形的形状,否则,有(无限)许多解决方案可以适合您的目标区域。
【讨论】:
【参考方案2】:一般来说,我想不出一种算法可以改进对所有可能的四边形的最坏情况迭代。如果该区域与点分布的区域相比较小,您可以使用quadtree 排列来清除距离太远而无法形成合理四边形的点。但即使在那里你也必须小心,因为一个很薄的四边形有远距离的点可能会有恰到好处的面积,所以你可能不得不让自己接受四次算法。
但是你可以使用加速:当你有三个点时,找到相关三角形的面积,如果它大于 abs(target area - best area so far) 那么你不需要尝试任何值第四点。
正如我在 cmets 中提到的,四边形区域需要 Bretschneider's formula,Heron 用于三角形。
【讨论】:
好吧,我知道 Heron 是针对三角形 xd 我想实际上将其面积计算为 2 个三角形。但无论如何,我做了蛮力,有 4 个 for 循环。它适用于我尝试过的测试用例,所以我希望它也能通过他们的测试。谢谢:) @user3751721 是的,您可以这样做。很明显他们不会穿越吗?以上是关于四边形的面积的主要内容,如果未能解决你的问题,请参考以下文章