Implementation
CreateBoxesResult createBoxes(int maxColorCount) {
cubes = List<Box>.generate(maxColorCount, (index) => Box());
cubes[0] = Box(
r0: 0, r1: maxIndex, g0: 0, g1: maxIndex, b0: 0, b1: maxIndex, vol: 0);
List<double> volumeVariance =
List.filled(maxColorCount, 0.0, growable: false);
int next = 0;
int generatedColorCount = maxColorCount;
for (int i = 1; i < maxColorCount; i++) {
if (cut(cubes[next], cubes[i])) {
volumeVariance[next] =
(cubes[next].vol > 1) ? variance(cubes[next]) : 0.0;
volumeVariance[i] = (cubes[i].vol > 1) ? variance(cubes[i]) : 0.0;
} else {
volumeVariance[next] = 0.0;
i--;
}
next = 0;
double temp = volumeVariance[0];
for (var j = 1; j <= i; j++) {
if (volumeVariance[j] > temp) {
temp = volumeVariance[j];
next = j;
}
}
if (temp <= 0.0) {
generatedColorCount = i + 1;
break;
}
}
return CreateBoxesResult(
requestedCount: maxColorCount, resultCount: generatedColorCount);
}