0

我正在尝试锻炼如何有效地计算动态/随机视图的布局。

该视图将包含许多圆圈。每个圆圈都有预定的大小。这些尺寸都在给定的最大和最小尺寸之间。

我正在尝试找到一种有效的方法来在具有几个条件的矩形内布置圆圈。

圆圈不能与矩形的边缘重叠,并且圆圈之间必须有最小的“间距”。

我想出的第一个方法是随机生成坐标对并放置最大的圆。然后随机生成更多的坐标对,直到为下一个圆圈生成合适的坐标对。下一个,下一个,以此类推,直到全部画完。

这样做的问题是它可能需要很长时间才能完成。随后的每个圆圈都需要更长的时间来放置,因为它可以去的地方更少。

另一个问题是布局视图可能是不可能的。

我确信必须有更有效的方法来做到这一点,但我不知道从哪里开始。

4

1 回答 1

0

公式必须处理他们需要的最小可能正方形或从另一个角度来看,边缘点之间的排列具有最小可能密度。但是你的问题可以通过按大小对圆圈进行排序来解决,然后从最大的开始,逐步将它们排列到最小,因为越大越笨重,而较小的圆圈更容易适应小角落。

构建圆圈的三角形,其中 3 个圆圈有一个它们一起使用的描述空间。这个三角形有3个角对吗?:) 所以确定/计算那个角的角度和最接近 90 度角的角应该放在一个方角,最好说三个圆应该镜像放置,以便具有最合适的90 度角的圆后面是拐角处的那个人。如果第四个圆圈适合这个三角形的其余部分,那太好了,如果不是,你把这个圆圈精确地放在它里面,它是那个三角形的最小外层空间。因为它并不是说下一个更小的圆圈是最适合的圆圈,这也意味着你有一堆未放置的圆圈,直到找到一个更适合的圆圈。在你找到一个之后,你再次向上你的圆形堆栈并尝试将下一个放在其中一个角落,或者你尝试构建下一个三角形。在这里你可以看到这是多么复杂,该死!http://en.wikipedia.org/wiki/Malfatti_circles 但是无论如何,这个三角形角中的一个角越多 90°,这 3 个圆圈所占用的空间就越小。

另一个概念可能是考虑更大的圆圈,比如空间,在与矩形相关的一个角上留下一个三角形。该三角形具有可用于较小圆圈的最大空间。如果没有完美契合的圆圈,那么您占用的正方形空间就会长大。因此,就我考虑用想象的三角形来处理这个问题以与其中的拟合圆圈进行比较或从正方形中取三角形范围是解决方案的基础。

于 2013-04-12T15:02:34.417 回答