Exemplo n.º 1
0
        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();
            }
        }
Exemplo n.º 2
0
 private bool ACircleEventIsNext()
 {
     return((!CircleEventQueue.IsEmpty() && SiteEventQueue.IsEmpty) ||
            (!CircleEventQueue.IsEmpty() && SiteEventQueue.FindMax().Priority <= CircleEventQueue.HighestPriority()));
 }
Exemplo n.º 3
0
 private bool ASiteEventIsNext()
 {
     return((!SiteEventQueue.IsEmpty && CircleEventQueue.IsEmpty()) ||
            (!SiteEventQueue.IsEmpty && SiteEventQueue.FindMax().Priority > CircleEventQueue.HighestPriority()));
 }