private void FixPosition(IArc arc, CircleEvent circle) { var vertex = _vertexLists[arc].Last(); vertex.Position = circle.Center(); vertex.Sites = new List <SiteEvent> { circle.LeftArc.Site, circle.MiddleArc.Site, circle.RightArc.Site }; }
public void TryInsert(CircleEvent circleEvent) { TryRemoveEventCorrespondingTo(circleEvent.MiddleArc); if (HasThreeDistinctSites(circleEvent) && WillOccurBeforeTermination(circleEvent)) { IPriorityQueueHandle <CircleEvent> eventHandle = null; _queue.Add(ref eventHandle, circleEvent); _queueHandles.Add(circleEvent.MiddleArc, eventHandle); } }
public void CircleEvent(CircleEvent circle) { FixPosition(circle.MiddleArc, circle); FixPosition(circle.RightArc, circle); if (circle.LeftArc.LeftNeighbour == circle.RightArc.Site) { FixPosition(circle.LeftArc, circle); } else { _vertexLists[circle.RightArc].Add(new Vertex(circle.RightArc, _sweepline)); } }
private bool WillOccurBeforeTermination(CircleEvent circleEvent) { return(circleEvent.Priority >= _terminatingPriority); }
private bool HasThreeDistinctSites(CircleEvent circleEvent) { return(circleEvent.LeftArc.Site != circleEvent.MiddleArc.Site && circleEvent.MiddleArc.Site != circleEvent.RightArc.Site && circleEvent.RightArc.Site != circleEvent.LeftArc.Site); }
public void Remove(CircleEvent circleEvent) { Remove(circleEvent.MiddleArc); Sweepline.Priority = circleEvent.Priority; }