我正在尝试在Java中实现Bentley-Ottmann算法,但是在处理交点时需要实现交换操作(参见:Wikipedia上的Bentley-Ottmann),我卡住了。
如果我正确理解算法,有三种不同类型的事件点:
我正在使用
如果我正确理解算法,有三种不同类型的事件点:
- 起点:这是线段的最左端点,将此线段添加到树中,并检查它是否与直接位于该线段上方和下方的线段(如果存在)相交。
- 终点:这是线段的最右端点,从树中删除此线段并检查直接位于其上方和下方的线段是否相互相交。
- 交点:这是两条线段的交点,请在树中交换两条线段的位置[...]
我正在使用
TreeMap
作为存储片段的数据结构。我认为在 TreeMaps
中没有 swap
操作让你只需交换两个元素,这就是我卡住的地方。