【发布时间】:2017-08-06 15:30:23
【问题描述】:
假设你有一个凸多边形P(由点数组p定义)和一组点S(都在P之外),你如何选择一个点@ 987654327@ 这样它增加了P 的最大面积。
示例
我有一个 O(|P|) 公式来计算多边形的面积,但我不能对S 中的每个点都这样做
3 ≤ |P|, |S| ≤ 10^5
大点是S中的点P u S 中没有 3 个点是共线的
【问题讨论】:
-
对于每个
s,您在P和s的两个顶点之间引入边。您可以使用这些顶点形成的三角形来近似添加区域,这应该可以过滤掉很多不正确的区域。由于这些三角形的面积总是 >= 实际添加的面积,因此这种方法不会给出任何假阴性。计算实际面积可以简化为计算增加的面积,这样也节省了一些时间。 -
搜索动态凸包。有一个 DS 为点插入/删除操作提供 O(log(n)*log(n)) 时间。
-
@Paul 我如何选择您所说的 2 个顶点?
-
@MoroSilverio Id 建议根据多边形中心围绕多边形中心的旋转对多边形的点进行排序,并对前两个点进行二分搜索
a、b,其中P u {s}如果我们插入边缘a - s和s - b,就会变成凸的。搜索时间将是O(log |P|),假设恒定时间随机访问排序点。 -
我添加了一个测试结果和一个更简单的近似方法。
标签: algorithm optimization computational-geometry convex-hull