public static ClusterPrototype Merge(ClusterPrototype cluster1, ClusterPrototype cluster2) { return new ClusterPrototype(Point.Center(cluster1.Center, cluster2.Center), cluster1.points.ToList().Union(cluster2.points).ToList()); }
public IList <ClusterPrototype> MergeClustersIfRequired(IList <ClusterPrototype> clusters) { var clustersToIterateOver = new List <ClusterPrototype>(clusters); foreach (var cluster in clustersToIterateOver) { foreach (var otherCluster in new List <ClusterPrototype>(clusters)) { if (cluster != otherCluster && this.IsMergeRequired(cluster, otherCluster)) { clusters.Remove(cluster); clusters.Remove(otherCluster); clusters.Add(ClusterPrototype.Merge(cluster, otherCluster)); } } } return(clusters); }