4 月 17 日记录

Convex Hull of Intersections (ucup stage Aobayama)

发现很多情况下凸包都是一个三角形。然而也有反例:构造平行的直线组,凸包点数可以超过三个。

进一步地,凸包上的点数是 \(O(n)\) 量级的:考虑坐落在一条直线上的交点,最多只有两个属于凸包。

如何找到支配凸包的 \(O(n)\) 个点?

我们有结论:把所有直线拆成正反两个方向的有向直线,按照方向向量的极角排序,则只有极角相邻的两条直线交点可能属于凸包。手画一下也能发现,不能同时有斜率夹在两条直线之间且方向相反的两条直线——这种情况必然会导致交点出现一个更大的三角形。

有了结论,剩下的事情就很简单了。需要注意很多细节问题,诸如特殊处理多条平行直线。注意求凸包排序时别忘了加入到起始点的距离为第二关键字。代码里取了 \(\epsilon=10^{-8}\)\(\epsilon=10^{-9}\) 会挂。

posted @ 2025-04-17 20:10  Network_Error  阅读(17)  评论(0)    收藏  举报