我正在做这个基于浏览器的实验,给我 N 个特定的圆圈(假设它们有一张独特的图片),并且需要将它们放在一起,尽可能少地在它们之间留出空间。不一定非要排成一圈,但要“成群”在一起。
圆的大小是可定制的,用户可以通过拖动 javascript 滑块来更改大小,更改一些圆的大小(例如,在 10% 的滑块中,圆 4 的半径为 20px,圆 2 为 10px,圆5保持不变,等等......)。正如您可能已经猜到的那样,我将尝试在移动滑块时平滑地“转换”调整大小-重新定位。
到目前为止我尝试过的方法:我尝试使用物理引擎而不是手动尝试定位它们 -
想法:
- 在屏幕中心放置某种引力
- 使用物理引擎来处理球碰撞
- 在“拖动时间”滑块事件中,我只需设置不同的球尺寸,让引擎负责其余的工作
对于这个任务,我使用了“box2Dweb”。我在屏幕中心放置了一个引力,然而,直到球被放置在中心并漂浮起来花了很长时间。然后我把一个小的静态球放在中心,这样他们就会击中它然后停下来。它看起来像这样:
结果稍微好一点,但圆圈在静止之前仍然移动了一段时间。即使在玩弄了诸如球摩擦和不同引力之类的变量之后,整个东西也只是漂浮着,感觉非常“摇摆不定”,而我希望球只有在我拖动时间滑块时才移动(当它们改变大小时)。另外,box2d 不允许更改对象的大小,我将不得不破解我的方法来解决问题。
所以,box2d 方法让我意识到,也许让物理引擎来处理这个问题并不是解决问题的最佳方案。或者也许我必须包括一些我没有想到的其他力量。我在 StackOverflow 上发现了与我类似的问题。然而,非常重要的区别是它只“一次”生成一些 n 个非特定的圆圈,并且不允许额外的特定球大小和位置操作。
我现在真的被困住了,有没有人有任何想法如何解决这个问题?
更新:现在已经快一年了,我完全忘记了这个线程。我最终所做的是坚持物理模型并在几乎空闲的条件下重置力/停止。结果可以在这里看到http://stateofwealth.net/ 你看到的三角形在这些圆圈内。其余的线通过“delaunay triangulation algorithm”连接