BodyList = {} Body = class(nil,{type=0}) function newBody(x,y,mass,color) local o = {} -- coordinates o.x = x o.y = y -- velocities o.vx = 0 o.vy = 0 -- accceleration o.ax = 0 o.ay = 0 -- mass o.mass = mass -- color o.color = color table.insert(BodyList,o) end function UpdateBodiesAcceleration() for n, body in pairs(BodyList) do local ax = 0 local ay = 0 for o_n, other_body in pairs(BodyList) do if n ~= o_n then local dx = other_body.x - body.x local dy = other_body.y - body.y local d2 = dx*dx + dy*dy local f = (CONST_G * other_body.mass) / d2 * math.sqrt(d2 + CONST_S) ax = ax + dx * f ay = ay + dy * f end end body.ax = ax body.ay = ay end end function UpdateBodiesVelocity(dt) for _, body in pairs(BodyList) do body.vx = body.vx + body.ax * dt body.vy = body.vy + body.ay * dt end end function UpdateBodiesPosition(dt) for _, body in pairs(BodyList) do body.x = body.x + body.vx * dt body.y = body.y + body.vy * dt end end