
将所有线段的左右端点以X坐标升序放入顶点优先队列中,然后初始化扫描线链表(查找二叉树)
依次取出顶点优先队列中的点,
1 左端点:将其线段插入到扫描线链表中,按照y的升序排列链表,找到在此线段上面相邻和下面相邻的线段,并依次计算此线段与其上面线段的交点,和此线段与其下面线段的交点,如果有交点,并且顶点队列中没有出现过,插入到顶点优先队列中;
2 右端点:将其线段从扫描线队列中删除,计算此线段上面相邻的线段与下面相邻的线段的交点,如果有交点,并且没有在顶点队列出现过,将交点插入到顶点优先队列中
3 交点:输出该交点,交换此交点所属的两条线段的位置,并分别计算这两条线段与他们的相邻线段的交点,插入的顶点优先队列中
(n+k)logn
k为交点数目,n为线段数量
本文介绍了一种基于扫描线算法的线段交点检测方法,通过维护一条虚拟的扫描线和一个顶点优先队列来高效地寻找平面内线段的所有交点。此算法的时间复杂度为(n+k)logn,其中k为交点数目,n为线段数量。
1849





