public void ProcessNextEvent() { if (ACircleEventIsNext()) { var circleEvent = CircleEventQueue.PopHighestPriorityEvent(); Beachline.Remove(circleEvent); CircleEventQueue.TryInsertAll(Beachline.PotentialCircleEvents); Edges.CircleEvent(circleEvent); Beachline.ClearPotentialCircleEventList(); Beachline.ClearNewArcs(); } else if (ASiteEventIsNext()) { Beachline.Insert(SiteEventQueue.DeleteMax()); CircleEventQueue.TryInsertAll(Beachline.PotentialCircleEvents); if (Beachline.NewArcs.Any()) { Edges.NewArc(Beachline.NewArcs[0][0], Beachline.NewArcs[0][1]); } Beachline.ClearPotentialCircleEventList(); Beachline.ClearNewArcs(); } if (CircleEventQueue.IsEmpty() && SiteEventQueue.IsEmpty) { Beachline.Clear(); } }
private bool ACircleEventIsNext() { return((!CircleEventQueue.IsEmpty() && SiteEventQueue.IsEmpty) || (!CircleEventQueue.IsEmpty() && SiteEventQueue.FindMax().Priority <= CircleEventQueue.HighestPriority())); }
private bool ASiteEventIsNext() { return((!SiteEventQueue.IsEmpty && CircleEventQueue.IsEmpty()) || (!SiteEventQueue.IsEmpty && SiteEventQueue.FindMax().Priority > CircleEventQueue.HighestPriority())); }