我需要将大的静态大小的矩形分割成小矩形的算法。我一个完美的实现是这样的:将大矩形划分为小矩形(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