public static Edge CreateBisectingEdge(Site s0, Site s1) { var edge = Create(); edge.LeftSite = s0; edge.RightSite = s1; s0.AddEdge(edge); s1.AddEdge(edge); var dx = s1.X - s0.X; var dy = s1.Y - s0.Y; var absdx = dx > 0 ? dx : -dx; var absdy = dy > 0 ? dy : -dy; edge.C = s0.X*dx + s0.Y*dy + (dx*dx + dy*dy)*0.5f; if (absdx > absdy) { edge.A = 1.0f; edge.B = dy/dx; edge.C /= dx; } else { edge.B = 1.0f; edge.A = dx/dy; edge.C /= dy; } Console.WriteLine(edge); return edge; }
private static int CompareInt(Site s1, Site s2) { int returnValue = Voronoi.CompareByYThenX(s1, s2); if (returnValue == -1) { if (s1.SiteIndex > s2.SiteIndex) { var temp = s2.SiteIndex; s2.SiteIndex = s1.SiteIndex; s1.SiteIndex = temp; } } else if (returnValue == 1) { if (s2.SiteIndex > s1.SiteIndex) { var temp = s2.SiteIndex; s2.SiteIndex = s1.SiteIndex; s1.SiteIndex = temp; } } return returnValue; }
private static int Compare(Site s1, Site s2) { return CompareInt(s1, s2); }
public int Push(Site site) { _sorted = false; _sites.Add(site); return Length; }