# Impulse resolution and position correction

This topic is 2053 days old which is more than the 365 day threshold we allow for new replies. Please post a new topic.

## Recommended Posts

**Please delete duplicate post in the maths section, realised I posted it incorrectly**

Details:

C++
SFML
2D Platformer

Position correction and Impulse Resolution Issue:

Hello all. I am having some issues with my impulse resolution. So far I have an intersection test which returns whenever two AABB objects have collided. This works perfectly.

Next, when the two objects have intersected, I need to do impulse resolution and then position correction to move the dynamic object in a certain manor. So far I have it working perfectly on the two sides:

The arrows indicate that the response works fine on these axis's.

Some code!

// ---- Calculating normals in x and y
float a, b, otherA, otherB;

a = max.y - min.y;
b = min.x - max.x;

otherA = other.max.y - other.min.y;
otherB = other.min.x - other.max.x;

float magnitude = sqrt(a*a) + (b* b);
float magnitudeOther = sqrt(otherA * otherA) + (otherB * otherB);

vector2D normal=(a/magnitude,b/magnitude);
vector2D normalOther(otherA / magnitudeOther, otherB / magnitudeOther);


The first thing I do is calculate my normals which I use later on for my correction.

// ---- Masses so I can use inverse mass - hard coded for now

float m, mOther, inverse, inverseOther;
m = 50;
mOther = 50;
inverse = 1.f/m;
inverseOther = 1.f/mOther;

The next thing I do is calculate my extents:

vector2D extent, otherExtent;

float e = 0.6;
float slop = 0.01;
float percentage = 0.1;


From here I now work out my impulse resolution and position correction:

vector2D correction, pd, j;

pd.x = (extent.x + otherExtent.x) - (other.getPosition().x - getPosition().x); // penetration in X - need to double check this
pd.y = (extent.y + otherExtent.y) - (other.getPosition().y - getPosition().y); // penetration in Y

correction.y = (std::max(pd.x-slop,0.00f) / (inverse + inverseOther))* percentage * normal.x; //  correction based on the max of pen - by the slop. Percentage for overlap
correction.y = (std::max(pd.y-slop,0.00f) / (inverse + inverseOther))* percentage * normal.y;

j.x = -(1.f + e) + (minus(other.vel).dotProduct(normal)) / inverse + inverseOther;
j.y = -(1.f + e) + (minus(other.vel).dotProduct(normal)) / inverse + inverseOther;


From here I apply the code to my velocity in Y using j.y + correction.y, this in turn results my dynamic object resting on my static object with a little bit of bounce, which is wrong. It needs to be resting there perfectly so allow clean movement. Little stuck on what to do next.

• ### Game Developer Survey

We are looking for qualified game developers to participate in a 10-minute online survey. Qualified participants will be offered a \$15 incentive for your time and insights. Click here to start!

• 14
• 18
• 16
• 11
• 9