Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- local function resolveDynamically(b1, b2)
- -- Distance between balls
- --local fDistance = um.distance(b1.px, b1.py, b2.px, b2.py)
- local fDistance = math.sqrt((b1.px - b2.px)*(b1.px - b2.px) + (b1.py - b2.py)*(b1.py - b2.py));
- -- Normal
- local nx = (b2.px - b1.px) / fDistance;
- local ny = (b2.py - b1.py) / fDistance;
- -- Tangent
- local tx = -ny;
- local ty = nx;
- -- Dot Product Tangent
- local dpTan1 = b1.vx * tx + b1.vy * ty;
- local dpTan2 = b2.vx * tx + b2.vy * ty;
- -- Dot Product Normal
- local dpNorm1 = b1.vx * nx + b1.vy * ny;
- local dpNorm2 = b2.vx * nx + b2.vy * ny;
- -- Conservation of momentum in 1D
- local m1 = (dpNorm1 * (b1.weight - b2.weight) + 2.0 * b2.weight * dpNorm2) / (b1.weight + b2.weight);
- local m2 = (dpNorm2 * (b2.weight - b1.weight) + 2.0 * b1.weight * dpNorm1) / (b1.weight + b2.weight);
- local b1Speed = math.sqrt(b1.vx ^ 2 + b1.vy ^ 2)
- local b2Speed = math.sqrt(b2.vx ^ 2 + b2.vy ^ 2)
- local precol = b1Speed + b2Speed
- print("total speed: " .. precol)
- -- Update ball velocities
- b1.vx = tx * dpTan1 + nx * m1;
- b1.vy = ty * dpTan1 + ny * m1;
- b2.vx = tx * dpTan2 + nx * m2;
- b2.vy = ty * dpTan2 + ny * m2;
- b1Speed = math.sqrt(b1.vx ^ 2 + b1.vy ^ 2)
- b2Speed = math.sqrt(b2.vx ^ 2 + b2.vy ^ 2)
- local postcol = b1Speed + b2Speed
- print("total speed: " .. postcol)
- end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement