转自:http://blog.youkuaiyun.com/sunmenggmail/article/details/7994299
将所有线段的左右端点以X坐标升序放入顶点优先队列中,然后初始化扫描线链表(查找二叉树)
依次取出顶点优先队列中的点,
1 左端点:将其线段插入到扫描线链表中,按照y的升序排列链表,找到在此线段上面相邻和下面相邻的线段,并依次计算此线段与其上面线段的交点,和此线段与其下面线段的交点,如果有交点,并且顶点队列中没有出现过,插入到顶点优先队列中;
2 右端点:将其线段从扫描线队列中删除,计算此线段上面相邻的线段与下面相邻的线段的交点,如果有交点,并且没有在顶点队列出现过,将交点插入到顶点优先队列中
3 交点:输出该交点,交换此交点所属的两条线段的位置,并分别计算这两条线段与他们的相邻线段的交点,插入的顶点优先队列中
(n+k)logn
k为交点数目,n为线段数量