myrheon-solar-system/body.lua
2022-05-16 14:59:28 +02:00

61 lines
1.1 KiB
Lua

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