2009-11-05 58 views
0

。 。你好,每个人。用于在非矩形画布内定位矩形和随机大小物体的算法

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

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

回答

0

我想你可以用物理模拟完成所有的事情。这听起来很复杂,但并不像听起来那么难。有几个物理API的动作3.我已经使用了as3 port of Box2D,我对结果很满意。

我会去了解它的方式是:

  • 定义墙的形状(即让你的多边形线)
  • 定义盒子(矩形)
  • 创建物理机构正确的显示对象信息(联动编号等)
  • 将它们添加到物理世界中并进行模拟。

我不知道你使用actionscript 3的经验是什么,但看看World Construction Kit。它应该让你快速走上正轨。