Hello(adsbygoogle = window.adsbygoogle || []).push({});

I am programming a simple physics engine for a game.

I am colliding a box with the 'floor' (inverseMass = 0). I detect the vertices of the box that collide with the floor, calculate the impulse required to get the box to bounce for each contact, and apply it to that contact. The calculation for the impulse uses the standard forumula :

n is the contactNormal;

iitw is the inverseInertiaTensor in world coordinates of the box

r = relative position of contact point w.r.t centre of mass i.e (contactPoint - position of centre of mass)

e = restitution

numerator = -(1+e)relativeVelocity.Dot(n)

denominator = (n.Dot(n) * inverseMass) + ((iitw*r.Cross(n)).Cross(r)).Dot(n)

impulse = numerator/denominator;

I find that this works when the box is a cube (length = breadth = height ) and bouncing with its base parallel to the floor. If all dimensions are not equal - or the box is tilted a bit it is wrong.

Could somebody point out what I am doing wrong?

**Physics Forums | Science Articles, Homework Help, Discussion**

Dismiss Notice

Join Physics Forums Today!

The friendliest, high quality science and math community on the planet! Everyone who loves science is here!

The friendliest, high quality science and math community on the planet! Everyone who loves science is here!

# Colliding a box with the floor

**Physics Forums | Science Articles, Homework Help, Discussion**