private void TestOverlapRemovalOnGraph(string graphName, Graph parentGraph, HashSet <Tuple <int, int> > proximityEdges, HashSet <Tuple <int, int, int> > proximityTriangles, Tuple <String, Action <GeometryGraph> > layoutMethod, int layoutPos, Tuple <string, OverlapRemovalSettings> overlapMethod, int overlapMethodPos) { // Graph parentGraph = Helper.CopyGraph(parentGraphOriginal); var geomGraphOld = Helper.CopyGraph(parentGraph.GeometryGraph); var geomGraph = parentGraph.GeometryGraph; // GeometryGraph graph = Helper.CopyGraph(geomGraph); List <Tuple <String, double> > statistics = new List <Tuple <string, double> >(); String layoutMethodName = layoutMethod.Item1; String overlapMethodName = overlapMethod.Item1; var overlapSettings = overlapMethod.Item2; IOverlapRemoval overlapRemover = GetOverlapRemover(overlapSettings, geomGraph); overlapRemover.RemoveOverlaps(); RefreshAndCleanGraph(parentGraph); var statIterations = Tuple.Create("Iterations", (double)overlapRemover.GetLastRunIterations()); var statEdgeLength = Statistics.Statistics.EdgeLengthDeviation(geomGraphOld, geomGraph, proximityEdges); var statProcrustes = Statistics.Statistics.ProcrustesStatistics(geomGraphOld.Nodes.Select(v => v.Center).ToList(), geomGraph.Nodes.Select(v => v.Center).ToList()); var statTriangleOrient = Statistics.Statistics.TriangleOrientation(geomGraphOld, geomGraph, proximityTriangles); var statArea = Statistics.Statistics.Area(geomGraph); // statistics.Add(Tuple.Create()); statistics.Add(statIterations); statistics.Add(statEdgeLength); statistics.Add(statProcrustes); statistics.Add(statArea); statistics.Add(statTriangleOrient); String nameAddon = "-" + layoutPos.ToString() + "_" + overlapMethodPos + "-" + layoutMethodName + "_" + overlapMethodName; // RefreshAndCleanGraph(parentGraph); // Parallel.Invoke( // ()=>parentGraph.Write(graphName + nameAddon+".msagl"), // () => SvgGraphWriter.Write(parentGraph, graphName + nameAddon + ".svg"); // // ); WriteHeader(statistics); String line = graphName + "," + geomGraph.Nodes.Count + "," + geomGraph.Edges.Count + "," + layoutMethodName + "," + overlapMethodName; for (int i = 0; i < statistics.Count; i++) { Tuple <string, double> stat = statistics[i]; line += "," + stat.Item2; } WriteLine(line); }
private static Tuple <string, double> RunStats(HashSet <Tuple <int, int> > proximityEdges, HashSet <Tuple <int, int, int> > proximityTriangles, IOverlapRemoval overlapRemover, GeometryGraph geomGraphOld, GeometryGraph geomGraph, List <Tuple <string, double> > sharedFamily) { var statIterations = Tuple.Create("Iterations", (double)overlapRemover.GetLastRunIterations()); /* * rotationAngleMean = Statistics.Statistics.RotationAngleMean(geomGraphOld, geomGraph, proximityEdges); * statProcrustes = Statistics.Statistics.ProcrustesStatistics(geomGraphOld.Nodes.Select(v => v.Center).ToList(), * geomGraph.Nodes.Select(v => v.Center).ToList()); * statTriangleOrient = Statistics.Statistics.TriangleOrientation(geomGraphOld, geomGraph, * proximityTriangles); * statArea = Statistics.Statistics.Area(geomGraph); * distortionOfTriangles = Statistics.Statistics.TrianglePropertyError(geomGraphOld, geomGraph, proximityTriangles);*/ for (int k = 8; k <= 12; k++) { sharedFamily.Add(Statistics.Statistics.SharedFamily(geomGraphOld, geomGraph, k)); } return(statIterations); }