예제 #1
0
        public override IHierarchy Generate()
        {
            GroupHierarchy result = new GroupHierarchy()
            {
                Rank = this.Rank + 1
            };

            foreach (var SubCluster in Clusters)
            {
                Cluster similar = SubCluster.GetMostSimilar(GetNeighbours(SubCluster)).First();
                if (similar != null)
                {
                    result.AddCluster(Cluster.Combine(SubCluster, similar));
                }
            }

            return(result);
        }
예제 #2
0
        public override IHierarchy Generate()
        {
            float         rate    = 2.0F;
            float         newSize = this.Size * rate;
            GridHierarchy result  = new GridHierarchy(System.Convert.ToInt32(Math.Ceiling(this.Width / (double)rate) + 1), System.Convert.ToInt32(Math.Ceiling(this.Height / (double)rate) + 1), newSize)
            {
                Rank = this.Rank + 1
            };

            // Combine to a new cluster
            foreach (var SubCluster in Clusters)
            {
                Cluster similar = SubCluster.GetMostSimilar(GetNeighbours(SubCluster)).FirstOrDefault();
                if (similar != null)
                {
                    if (SubCluster.Parent == null && similar.Parent == null)
                    {
                        result.Clusters.Add(Cluster.Combine(SubCluster, similar));
                    }
                    else
                    {
                        Cluster.Combine(SubCluster, similar);
                    }
                }
            }
            // Initialize properties
            foreach (var SubCluster in result.Clusters)
            {
                SubCluster.Position = SubCluster.GetAveragePosition();
                SubCluster.Color    = SubCluster.GetAverageColor();
            }
            // Locate to cell
            foreach (var SubCluster in result.Clusters)
            {
                Vector2 p = SubCluster.Position;
                int     x = System.Convert.ToInt32(p.X / (double)result.Size);
                int     y = System.Convert.ToInt32(p.Y / (double)result.Size);
                result.Grid[x, y].Add(SubCluster);
            }
            return(result);
        }
예제 #3
0
        public override IHierarchy Generate()
        {
            GroupHierarchy result = new GroupHierarchy()
            {
                Rank = this.Rank + 1
            };

            foreach (var SubCluster in Clusters)
            {
                Cluster similar = SubCluster.GetMostSimilar(GetNeighbours(SubCluster)).First();
                if (similar != null)
                {
                    result.AddCluster(Cluster.Combine(SubCluster, similar));
                }

                float progress = System.Convert.ToSingle((Clusters.IndexOf(SubCluster) + 1) / (double)Clusters.Count);
                Debug.WriteLine($"{progress}");
            }

            return(result);
        }