2012-05-25 51 views
2

我尝试创建一个物理模拟场景。场景由矩形池塘中漂浮的矩形浮体组成。事情是这样的:如何用不相交的旋转矩形填充矩形区域?

Rectangular floes

所以我需要填充不相交的矩形区域旋转在指定范围内的宽度和高度的矩形。我不需要找到该地区的最佳覆盖面。目标只是生成不带交叉点的不同大小的浮子。

我想要一个没有任何动态的解决方案,只使用碰撞检测算法。

+2

当然,它不可能是最佳的----最佳的解决方案将瓷砖。:) –

回答

1

有我会做什么:

假设矩形的长度[MAXSIZE MINSIZE]之间

r <- MaxSize 

do{ 
    Trying adding non-intersecting circles to the area with radius r and random center (x,y). We use circle instead of rectangle because intersection detecting for circles are easier than rectangles. e.g. if distance(x,y,x',y')<r+r' then we are good. 

    If adding circle failed{ 
    r--; 
    if r< MinSize break; 
    } 
} 

现在,您将在相交的广场拥有完全的平面。会有差距,因为我们使用圆圈作为交集检测。如果这对你来说不够好,请将方块长成长方形。您可以通过检查所有点对特定边界来做到这一点,并决定您可以增长多少点。

2

你可以考虑模拟一组盒子落入一个方形桶并保存所有盒子的位置,一旦他们休息。

box2d是一个开源的2D物理库,可以为你做到这一点 - 你可能认识到它是愤怒的小鸟和数百万的Flash游戏背后的物理引擎。

+0

不错的想法,但我希望得到一个没有任何动态的解决方案,只使用碰撞检测。我已根据此评论更新了我的问题。 –