You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于中心点均匀分布不同距离尺寸圆形并规避碰撞的方法咨询

圆形排布实现方案

核心逻辑

优先级严格遵循:碰撞规避 > 同层均匀分布 > 跨层间隙优化,围绕固定中心点按distance分层处理,优先确定内层位置再向外扩展。

分步实现

  • 分层排序
    将所有圆形按distance从小到大分组,相同distance的归为同一层,优先处理内层(distance值更小的层),避免外层占位影响内层布局。
  • 同层初始角度分配
    同一层的圆形先按size从大到小排序,大尺寸圆形优先分配位置降低后续碰撞概率。初始角度默认按数量均分:初始角度 = 2π * i / 同层圆形总数,i为当前圆形的排序序号,初步保证分布均匀。
    若同层圆形size差异较大,可换用权重分配逻辑:单圆初始占用角度 = 2π * (当前圆半径 / 同层所有圆半径总和),进一步减少同层碰撞概率。
  • 碰撞检测与位置微调
    碰撞判定规则:两个圆形碰撞的充要条件为两圆圆心距 < 两圆半径之和。
    先做同层相邻碰撞检测,若相邻两圆碰撞,将两个圆的角度往远离对方的方向等比例微调,直到同层所有圆形无碰撞。微调时可设置最大偏移阈值,避免偏移过量导致扎堆,超过阈值直接触发合并逻辑。
    同层处理完成后,再与所有已确定位置的内层圆形做跨层碰撞检测,若出现碰撞优先微调外层圆形的角度,角度调整范围内无法规避的直接触发合并。
  • 碰撞合并规则
    触发合并的多个圆形,新圆形参数按以下规则计算:
    • 新size:若size对应面积则直接取所有合并圆size之和;若size对应半径则先计算所有合并圆的总面积加总,再换算为新半径
    • 新distance:取所有合并圆的distance按各自size加权的平均值
    • 新位置:取所有合并圆的质心位置
      合并完成后重新对新圆形做相邻碰撞检测,直到所有圆形均无碰撞。

可选优化

如果对均匀性要求更高,可以在所有层处理完成后,做一次全局的力导向模拟:给每个圆形施加斥力,同一层的圆形额外施加均匀分布的拉力,迭代若干次后锁定位置,既能保证无碰撞,也能进一步降低扎堆概率。


内容的提问来源于stack exchange,提问作者stiil

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 11:57:06