您的位置:首页 > 编程语言 > Go语言

sweeping line algorithm -- calculate line segment intersections

2015-01-11 17:26 369 查看
转自:http://blog.csdn.net/sunmenggmail/article/details/7994299



将所有线段的左右端点以X坐标升序放入顶点优先队列中,然后初始化扫描线链表(查找二叉树)

依次取出顶点优先队列中的点,

1 左端点:将其线段插入到扫描线链表中,按照y的升序排列链表,找到在此线段上面相邻和下面相邻的线段,并依次计算此线段与其上面线段的交点,和此线段与其下面线段的交点,如果有交点,并且顶点队列中没有出现过,插入到顶点优先队列中;

2 右端点:将其线段从扫描线队列中删除,计算此线段上面相邻的线段与下面相邻的线段的交点,如果有交点,并且没有在顶点队列出现过,将交点插入到顶点优先队列中

3 交点:输出该交点,交换此交点所属的两条线段的位置,并分别计算这两条线段与他们的相邻线段的交点,插入的顶点优先队列中

(n+k)logn

k为交点数目,n为线段数量
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: