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); }
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); }
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); }