Advertisement Jump to content
Sign in to follow this  

Colision 2D - getting push vector

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

If you intended to correct an error in the post then please contact us.

Recommended Posts

Hi, at the moment i'm creating simple physic in my engine and i have problem with 1 thing: when i have colision rect<< >>rect(s) how can I calculate vector which say "if you dont want to colide move for [x,y]". That what I have is: moving rectangle, coliding with it rectangles, move vector of my rectangle and intersect rectangle of each rect-rect colision.
Main problematic colisions are:
As you can see i cannot sum all push vectors because my moving rectangle will be pushed too far away.
So that i'm getting 2 vectors from them which: has "best pushing" for x and for y value but counter to rect move vector.
But it doesnt works well too( I can find an example where it doesnt work ). Do you have any idea what should it do? Maybe i'm going bad way to get "push vector"? Any articles about getting this vector would be nice too.

Share this post

Link to post
Share on other sites
Hi there,

Your push directions are incorrect - the for rect vs rect the push directions are always either in the x or y axis only.

This article I wrote should give you some ideas, although not the complete answer:

If you shrink one box A down to a point, and then increase the dimensions of the other box B by those of box A, the push vector can be found as the shortest distance from the point (box A) to the edges of box B.

Hope that helps!

Cheers, Paul.

Share this post

Link to post
Share on other sites
The algoritm you are looking for is the Separating Axis Theorem (SAT) and its use of the Minimum Translation Vector (MTV).

A few links:


Share this post

Link to post
Share on other sites
Sign in to follow this  

  • Advertisement

Important Information

By using, you agree to our community Guidelines, Terms of Use, and Privacy Policy. is your game development community. Create an account for your GameDev Portfolio and participate in the largest developer community in the games industry.

Sign me up!