Как проверить, что таблица кругов не сталкивается с ростом

У меня есть таблица, созданная путем добавления случайных x, y и r (радиуса), которые я использую для рисования кругов. Сначала они проверяются, чтобы новые круги не перекрывали существующие. Затем эти круги медленно растут с течением времени. Я пытаюсь понять, как проверить мою таблицу колец, когда они вырастают настолько, что пересекаются.

Я не могу найти способ протестировать первый против всех остальных в таблице, затем 2-й против всех остальных и т. д. Удалив все, что перекрывается.

Начал с этого, но понял, что в лучшем случае он не будет работать, он будет сравнивать себя только со следующим кругом, но вылетит, когда окажется в конце стола.

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

person Jason Moreland Digitalrecline    schedule 08.08.2017    source источник


Ответы (1)


person    schedule
comment
Ура работает как шарм. Я никогда раньше не видел такой конструкции [[ for k = #rings, 1, -1 do ]] - person Jason Moreland Digitalrecline; 08.08.2017