Circle Collisions

BlitzMax Forums/BlitzMax Beginners Area/Circle Collisions

Hi,

I'm trying to make a Rect (Non rotating) to Circle collision function but I'm having a bit of difficulty getting it to work properly.

I've got a Circle 2 Circle, Rect to Rect and Point to Circle working ok, but I just can't seem to figure out a good way of doing Rect to circle.
At the moment I have a function that checks all 4 four corners of the square and checks Point To Circle style with this against all 4 corners.

But this doesn't work properly at all with lengthy rectangles and small circles or very large circles and small rects.

Basically what I'm trying to achieve is something like this:-

Circle2Rect(C_X, C_Y, C_RADIUS, R_X, R_Y, R_WIDTH, R_HEIGHT)

Anyone want to help and put me out of my misery? ;)

Not the optimal solution below, but it should work:

1. Check Rect to Rect. If no collision, return False. (Circle-Rectangle collision will be a subset of Rectangle-Rectangle collision.)
2. Check To see if the circle's x origin falls between the x bounds of the rect. If yes, return True. (If there was a rect-rect collision, then you'll be sure that there's a collision if the x value for the center of the circle falls between the x bounds of the rectangle; the only time there might -not- be a collision is if the circle's rectangle intersects a corner, but the circle itself doesn't.)
3. Repeat 2, except for y.
4. Check the "four points to circle" collision. Return the result.

If the distance between the centrepoint of circle1 and the centrepoint of circle2 is less than the radius of Circle1 + radius of circle2 then there's been a collision.

Or to answer the question you're asking: http://vband3d.tripod.com/visualbasic/tut_mixedcollisions.htm

/me pushes everyone to the floor and gives them a big hug.

Glad to be of help!