private static void SplitCubes(List<MedianCutCube> cubes, int count)
{
int cubeIndexToSplit = cubes.Count - 1;
while (cubes.Count < count)
{
MedianCutCube cubeToSplit = cubes[cubeIndexToSplit];
MedianCutCube cube1, cube2;
// find the longest color size to use for splitting
if ((cubeToSplit.RedSize >= cubeToSplit.GreenSize) && (cubeToSplit.RedSize >= cubeToSplit.BlueSize))
{
cubeToSplit.SplitAtMedian(RGB.R, out cube1, out cube2);
}
else if (cubeToSplit.GreenSize >= cubeToSplit.BlueSize)
{
cubeToSplit.SplitAtMedian(RGB.G, out cube1, out cube2);
}
else
{
cubeToSplit.SplitAtMedian(RGB.B, out cube1, out cube2);
}
// remove the old "big" cube
cubes.RemoveAt(cubeIndexToSplit);
// add two smaller cubes instead
cubes.Insert(cubeIndexToSplit, cube1);
cubes.Insert(cubeIndexToSplit, cube2);
if (--cubeIndexToSplit < 0)
{
cubeIndexToSplit = cubes.Count - 1;
}
}
}
}