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); }
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); }
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)); }