我尝试为物理模拟创建场景。场景由漂浮在矩形池塘中的矩形浮体组成。像这样:
所以我需要用一个非交叉的旋转矩形填充一个矩形区域,其宽度和高度在指定的范围内。我不需要找到该区域的最佳覆盖范围。目标只是在没有交叉点的情况下生成不同大小的浮体。
我想获得一个没有任何动态的解决方案,只使用碰撞检测算法。
答案 0 :(得分:2)
你可以考虑模拟落入方形桶的盒子集合,并在它们休息后保存所有盒子的位置。
box2d
是一个开源的2D物理库,它可以为你做到这一点 - 你可能会认为它是“愤怒的小鸟”背后的物理引擎和数以万计的Flash游戏。
答案 1 :(得分:1)
要模拟实体(即非交叉)对象,可以使用物理引擎。碰巧我前几天阅读Farseer tutorial for the absolute beginners,其中包含一个几乎完全描述您需求的视频。 Farseer是box2d的.NET版本,您可能已经听说过。
答案 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;
}
}
现在你将有一个相交正方形的飞机。因为我们使用圆作为交叉检测,所以会有间隙。如果这对您来说不够好,请将正方形增长为矩形。你可以通过检查某个边界的所有点来确定你可以增长多少。