Ejemplo n.º 1
0
        /// <summary>
        /// Builds groups based on a list of entries. The input list of
        /// entries will be modified.
        /// </summary>
        /// <param name="entries">List of entries</param>
        /// <param name="cap">Capacity for each group</param>
        /// <returns></returns>
        private List<Group> LoadGroups(List<Rectangle> entries, int cap)
        {
            List<Group> result = new List<Group>();

            while (entries.Count != 0)
            {
                Rectangle head = entries[0];
                entries.RemoveAt(0);
                Group group = new Group(cap, head);

                for (int i = 1; i < cap && entries.Count != 0; i++)
                {
                    float minDist = -1;
                    int minIndex = 0;

                    for (int j = 0; j < entries.Count; j++)
                    {
                        float dist = head.distance(entries[j]);
                        if (minDist == -1 || dist < minDist)
                        {
                            minDist = dist;
                            minIndex = j;
                        }
                    }

                    Rectangle minDistRect = entries[minIndex];
                    entries.RemoveAt(minIndex);
                    group.Add(minDistRect);
                }

                result.Add(group);
            }

            return result;
        }