예제 #1
0
        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);
        }
예제 #2
0
        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);
        }