如何检查 Table 个圆圈在长大时不会发生碰撞

How to Check Table of Circles don't collide as they grow

我有一个 table,它是通过添加随机的 x、y 和 r(半径)创建的,我用它来画圆。首先对它们进行测试以确保新圆圈不会与现有圆圈重叠。随着时间的推移,这些圆圈会慢慢变大。我正在尝试弄清楚如何测试我的戒指 table 何时它们长得如此之大以至于它们相交。

我无法找到一种方法来测试第一个与 table 中的所有其他人,然后是第二个与所有剩余的人等。删除任何重叠。

从这个开始,但意识到它充其量不会工作,它只会将自己与下一个圆进行比较,但在 table 结束时崩溃。

local function newRing()
    while true do -- infinite loop to create new rings
        for i, v in ipairs(rings) do
          --[[ collision calculations on all rings in table until a collision
              is detected using Pythagoras to calculate distance]]
            if not collides then
               rX= v.x
               rY = v.y
               rR = v.r
            local dx = rX - rings[i+1].x
            local dy = rY - rings[i+1].y
            local distCalc = dx * dx + dy * dy
            if distCalc <= ((rings[i+1].r + ringWidth) + (rR + ringWidth))^2 then
                collides = true
                break -- restarts while loop once one collision is found
            end -- end if distCalc block
        end -- i,v block
          break
      end -- end if not collides block
    end -- end while loop
  end
-- remove all collided rings
for k = #rings, 1, -1 do
   local rX = rings[k].x
   local rY = rings[k].y
   local rR = rings[k].r
   local collides 
   for j = k + 1, #rings do
      local dx = rX - rings[j].x
      local dy = rY - rings[j].y
      local distCalc = dx * dx + dy * dy
      if distCalc <= ((rings[j].r + ringWidth) + (rR + ringWidth))^2 then
         collides = true
         break
      end
   end
   if collides then
      -- do something here (erase ring[k] from the screen, etc.)
      table.remove(rings, k)
   end
end