コード例 #1
0
        public int CompareTo(Site s1)
        {
            var returnValue = Voronoi.CompareByYThenX(this, s1);

            int tempIndex;

            switch (returnValue)
            {
            case -1:
                if (SiteIndex > s1.SiteIndex)
                {
                    tempIndex    = SiteIndex;
                    SiteIndex    = s1.SiteIndex;
                    s1.SiteIndex = tempIndex;
                }
                break;

            case 1:
                if (s1.SiteIndex > SiteIndex)
                {
                    tempIndex    = s1.SiteIndex;
                    s1.SiteIndex = SiteIndex;
                    SiteIndex    = tempIndex;
                }
                break;
            }

            return(returnValue);
        }
コード例 #2
0
        public int CompareTo(object obj)
        {
            var s2 = (Site)obj;

            var returnValue = Voronoi.CompareByYThenX(this, s2);

            // swap _siteIndex values if necessary to match new ordering:
            int tempIndex;

            switch (returnValue)
            {
            case -1:
                if (SiteIndex > s2.SiteIndex)
                {
                    tempIndex    = SiteIndex;
                    SiteIndex    = s2.SiteIndex;
                    s2.SiteIndex = tempIndex;
                }
                break;

            case 1:
                if (s2.SiteIndex > SiteIndex)
                {
                    tempIndex    = s2.SiteIndex;
                    s2.SiteIndex = SiteIndex;
                    SiteIndex    = tempIndex;
                }
                break;
            }

            return(returnValue);
        }
コード例 #3
0
ファイル: Vertex.cs プロジェクト: s76/UDelaunay
        public static Vertex Intersect(HalfEdge halfEdge0, HalfEdge halfEdge1)
        {
            Edge     edge;
            HalfEdge halfEdge;

            var edge0 = halfEdge0.Edge;
            var edge1 = halfEdge1.Edge;

            if (edge0 == null || edge1 == null)
            {
                return(null);
            }

            if (edge0.RightSite == edge1.RightSite)
            {
                return(null);
            }

            var determinant = edge0.A * edge1.B - edge0.B * edge1.A;

            if (-1.0e-10 < determinant && determinant < 1.0e-10)
            {
                // the edges are parallel
                return(null);
            }

            var intersectionX = (edge0.C * edge1.B - edge1.C * edge0.B) / determinant;
            var intersectionY = (edge1.C * edge0.A - edge0.C * edge1.A) / determinant;

            if (Voronoi.CompareByYThenX(edge0.RightSite, edge1.RightSite) < 0)
            {
                halfEdge = halfEdge0;
                edge     = edge0;
            }

            else
            {
                halfEdge = halfEdge1;
                edge     = edge1;
            }

            var rightOfSite = intersectionX >= edge.RightSite.X;

            if ((rightOfSite && halfEdge.LeftOrRight == Side.Left) || (!rightOfSite && halfEdge.LeftOrRight == Side.Right))
            {
                return(null);
            }


            return(Create(intersectionX, intersectionY));
        }