スイープ ライン アルゴリズムでは、左から右にスキャンするスイープ垂直線を使用するときに、形状 (円または長方形) の右端点をどのように検出するのか疑問に思っています。したがって、アルゴリズムは基本的に、左の端点に到達するとその形状の y 間隔の間隔ツリーに挿入され、任意の形状の右の端点に到達すると間隔ツリーから削除されます。例えば
ArrayList<Circle> circles = new ArrayList<Circle>();
BinarySearchTree<Interval> intervalTree = new BinarySearchTree<Interval>();
//sort by x coordinate
Collections.sort(circles, new Comparator<Circle>(){
@Override
public int compareTo(Circle c1, Circle c2){
return c1.x - c2.x;
}
});
//here's where the sweep line begins
for(int i = 0; i < circle.size(); i++)
{
//we hit the ith circle's left endpoint
Circle current = circle.get(i);
//insert into the interval tree
intervalTree.addInterval(new Interval(current.y, current.y+current.height));
}
しかし、Circle の適切な終点に到達したかどうかはいつわかりますか? そのために別のハッシュマップが必要ですか?