用于在非矩形画布内定位矩形和随机大小的对象的算法

时间:2009-11-05 20:53:33

标签: algorithm flash canvas position

。 。大家好,各位。

。 。我有一个由许多点(x,y)定义的画布 - 它不是矩形,但至少它会遵循一些近似六边形的形状(如扭曲的六边形,角度总是<180度)。我还有一个不同长方形的大集合(或多或少140个,宽度和高度不同),我需要将它们放在形状内。它们的位置必须像被重力推动一样(我的意思是......形状的顶部不需要填充,但底部需要填充)。 。 。现在我唯一的想法是为每个“y”位置存储最小和最大“x”位置(类似于:limits [300] = [30,30]; limits [299] = [29,32]; ... 。),遍历矩形,获取它们的区域,然后比较这些值以找到最佳位置。我现在发行量最大的是它们需要以“有机”方式组织,而不是像桌子一样(我不能有行和列并将它们放在单元格内。它们需要尽可能好地定位就像流畅地,并排,一个在另一个之上......)。我不确定如何管理定位。 。 。我知道“自动平衡”物体的一些很好的例子(一个很好的例子是“球池”Chrome实验:http://mrdoob.com/projects/chromeexperiments/ball_pool/),但是它们使用矩形画布和圆形物体,这更容易比较极限。 。 。现在我最好的想法是检查每个可能的x / y组合的对象,从下到上,从左到右,检查是否有任何区域重叠,但这可能会锁定整个计算机进行几分钟的计算(屏幕上的更多信息,需要的计算越多。)

。 。该项目在Flash上​​运行,但任何示例,提示,算法,纸张或伪代码都将有很大帮助。

1 个答案:

答案 0 :(得分:0)

我认为你可以使用物理模拟完成所有工作。这可能听起来很复杂,但并不像听起来那么难。动作脚本3有几个物理API。我使用了as3 port of Box2D,我对结果非常满意。

我的方式是:

  • 定义墙的形状(形成多边形的线条)
  • 定义框(矩形)
  • 使用正确的显示对象信息(链接ID等)创建物理实体
  • 将它们添加到物理世界并进行模拟。

我不知道你对动作脚本3的体验是什么,但看看World Construction Kit。它应该可以让你快速上手。