我有一個長方形寬x高和N個相同未知尺寸的方塊。 我必須確定這些正方形的最大尺寸以及行和列的數量,以便完美地適合(UPD。我的意思是不要填滿所有空間,但儘可能多地填充空間)放入矩形中。將方塊包裝成長方形
我猜,數學它看起來像這樣:
x * size <= width //x - number of columns
y * size <= height //y - number of rows
x * y <= N //N - number of squares
size -> max //size - size of squares
最終結果可能是這樣的:
1 1 1 1
1 1 1 1
1 1 0 0
其中1
= squares
,0
=空space`。
事實上,我看到了類似的問題,但具有預定義的正方形大小。另外,我寫了一些笨拙的算法,但它的結果非常不滿意..
編輯:我現在的算法:
我嘗試了很多的變化,但我不能讓所有的情況下工作得很好。其實,我可以通過所有可能的尺寸,但我不喜歡這種方法。
// to make things more simple I put width as bigger size
int biggerSize = this.ClientSize.Width;
int lowerSize = this.ClientSize.Height;
int maxSize = int.MinValue;
int index = 0;
int index2 = 0;
// find max suitable size
for (int i = _rects.Count; i > 0; i--) {
int size = biggerSize/i;
int j = (int)Math.Floor((double)lowerSize/size);
if (i * j >= _boards.Count && size > maxSize) {
maxSize = size;
index = (int)i;
index2 = (int)j;
}
}
int counter = 0;
// place all rectangles
for (int i = 0; i < index; i++) {
for (int j = 0; j < index2; j++) {
if (counter < _rects.Count) {
_rects[counter].Size = new Size(maxSize, maxSize);
_rects[counter].Location = new Point(i * maxSize, j * maxSize);
}
counter++;
}
}
請發表您寫的算法,並描述結果如何不令人滿意。它太慢了嗎?結果不是你所期望的嗎?如果是這樣,你會得到什麼結果,你期望得到什麼結果? – Kevin
完成。感謝您的回覆 – DizzyBlack
我*認爲*我明白你的意思,但可以肯定的是,你可以包括一些例子嗎? (只需要數字就可以)假設你有一個24x60的矩形和N = 10,這個方塊的大小可以是12,對吧?如果N = 2,大小24? – harold