示例#1
0
        public static List <Facility> Cluster(string outputFile, double param1, double param2)
        {
            IClustering fac = new MShift();

            // add some properties to particular clustering algorithms
            Dictionary <string, object> properties = new Dictionary <string, object>();

            properties.Add("boundingBox", BoundingCluster);
            properties.Add("PARAM_1", param1);
            properties.Add("PARAM_2", param2);

            fac.SetProperties(properties);
            fac.ComputeClustering(VerticesToCluster);

            // save clustering result
            List <Facility> facilities = fac.GetFacilities();

            // ClusterSolution.SaveClusteringSolution(fac, inputFile, Dialog_SaveCluster.FileName, facilities);
            ClusterSolution.SaveClusteringToMeshLab(fac, outputFile, facilities, VerticesToCluster);

            return(facilities);
        }
示例#2
0
        private void Main_Cluster_Click(object sender, EventArgs e)
        {
            //int numberOfClusters = 9;
            //Vertex[] extendedVertices = new Vertex[vertices.Length + numberOfClusters];
            //for (int i = 0; i < vertices.Length; i++)
            //{
            //    extendedVertices[i] = vertices[i];
            //}
            //vertices = extendedVertices;
            // IClustering fac = new MShift();
            // IClustering fac = new KMeans();
            // IClustering fac = new CMeans();
            IClustering fac = new MShift();

            // add some properties to particular clustering algorithms
            Dictionary <string, object> properties = new Dictionary <string, object>();

            properties.Add("boundingBox", bBoxToCluster);
            properties.Add("PARAM_1", double.Parse(TextBox_Param1.Text));
            properties.Add("PARAM_2", double.Parse(TextBox_Param2.Text));
            // properties.Add("weights", new double[] { 1, 1, 1, 1, 1, 1, 1, 1 });

            fac.SetProperties(properties);

            // cluster again!
            //if ( facilities != null && facilities.Count > 0 )
            //{
            //    Vertex[] ret = new Vertex[facilities.Count];

            //    int index = -1;
            //    foreach (Facility f in facilities)
            //    {
            //        ret[++index] = new Vertex(vertices[f.VertexIndex].Coords);
            //    }

            //    Array.Clear(vertices, 0, vertices.Length);
            //    vertices = ret;
            //}

            fac.ComputeClustering(verticesToCluster);

            showPoints = false;

            // save clustering result
            facilities = fac.GetFacilities();

            ShowCalculateClusterConvexHull();

            CalculateFacilitiesPosition();

            Graph.Draw();


            if (Dialog_SaveCluster.ShowDialog() == DialogResult.OK)
            {
                // ClusterSolution.SaveClusteringSolution(fac, inputFile, Dialog_SaveCluster.FileName, facilities);
                ClusterSolution.SaveClusteringToMeshLab(fac, Dialog_SaveCluster.FileName, facilities, verticesToCluster);
            }

            // show debug window
            // new Statistics(bBox, fac.GetFacilities(), vertices);
        }