RBNode <AxisEdgesContainer> GetContainerNodeToTheLeftOfEvent(Point site) { double siteX = xProjection(site); return (edgeContainersTree.FindLast( container => xProjection(container.Source) <= siteX)); // Point.PointToTheRightOfLineOrOnLine(site, container.Source, // container.UpPoint)); }
void FindBeforeAfterV(VisibilityVertex v, RbTree <VisibilityVertex> nodeBoundaryRbTree, out VisibilityVertex beforeV, out VisibilityVertex afterV, Point center) { Point xDir = new Point(1, 0); var vAngle = Point.Angle(xDir, v.Point - center); var rNode = nodeBoundaryRbTree.FindLast(w => Point.Angle(xDir, w.Point - center) <= vAngle); beforeV = rNode != null ? rNode.Item : nodeBoundaryRbTree.TreeMaximum().Item; rNode = nodeBoundaryRbTree.FindFirst(w => Point.Angle(xDir, w.Point - center) >= vAngle); afterV = rNode != null ? rNode.Item : nodeBoundaryRbTree.TreeMinimum().Item; }
void FindBeforeAfterV(VisibilityVertex v, RbTree<VisibilityVertex> nodeBoundaryRbTree, out VisibilityVertex beforeV, out VisibilityVertex afterV, Point center) { Point xDir=new Point(1,0); var vAngle = Point.Angle(xDir, v.Point - center); var rNode = nodeBoundaryRbTree.FindLast(w => Point.Angle(xDir, w.Point - center) <= vAngle); beforeV = rNode!=null? rNode.Item : nodeBoundaryRbTree.TreeMaximum().Item; rNode = nodeBoundaryRbTree.FindFirst(w => Point.Angle(xDir, w.Point - center) >= vAngle); afterV = rNode != null ? rNode.Item : nodeBoundaryRbTree.TreeMinimum().Item; }
RBNode <ConeSide> GetLastNodeToTheLeftOfPointInRightSegmentTree(Point obstacleSideStart) { return(rightConeSides.FindLast( s => PointIsToTheRightOfSegment(obstacleSideStart, s))); }
internal static RBNode <CdtFrontElement> FindNodeInFrontBySite(RbTree <CdtFrontElement> cdtFrontElements, CdtSite piSite) { return(cdtFrontElements.FindLast(x => x.LeftSite.Point.X <= piSite.Point.X)); }
void ProjectToFront(CdtSite site, out RBNode <CdtFrontElement> frontElement) { frontElement = front.FindLast(s => s.X <= site.Point.X); }
internal static RBNode<CdtFrontElement> FindNodeInFrontBySite(RbTree<CdtFrontElement> cdtFrontElements, CdtSite piSite) { return cdtFrontElements.FindLast(x => x.LeftSite.Point.X <= piSite.Point.X); }