我需要將大的靜態大小的矩形分割成小矩形的算法。我一個完美的實現是這樣的:將大矩形劃分爲小矩形(2D Packing)
struct RECT
{
int l,t,r,b;
};
class BigRect
{
public:
// width and height of big rect
BigRect(unsigned width, unsigned height);
// returns -1 if rect cannot be allocated, otherwise returns id of found rect
int GetRect(unsigned width, unsigned height, RECT &out);
// returns allocated rect to big rectangle
void FreeRect(int id);
};
void test()
{
BigRect r(10, 10);
RECT out;
r.GetRect(4, 4, out); // rect found ({0,0,4,4} for example), returns 1
r.GetRect(5, 5, out); // rect found ({4,0,9,5} for example), returns 2
r.GetRect(6, 6, out); // no place found for rect, returns -1
r.FreeRect(2); // add {4,0,9,5} back to rect
r.GetRect(6, 6, out); // rect found (4,0,10,6)
}
所以我需要GetRect
和FreeRect
方法算法。任何想法和鏈接將不勝感激。
這氣味像功課。 – 2011-05-23 14:31:21
對子矩形的分配方式有任何限制嗎?例如。有沒有一個目標可以有效地包裝矩形,或者你可以將它們粘在任何適合的地方? – verdesmarald 2011-05-23 14:32:24
@ Jean-Paul Calderone。這不是功課。 @veredesmarald當然最好能有效地分配它們。 – 2011-05-23 14:34:58