After writing yesterday’s post, I noticed that I missed one big category of collisions: Point – Object collisions. This is where a you check if a single XY pair is inside a object. In this example I’ll use circles and squares, but you could use the algorithms that I wrote about in yesterday’s post with this method.

The technique is fairly simple. For a square, all you have to do is check if the XY pair is inside a box. The lua code looks like this:

function RectPoint(ax, ay, aw, ah, bx, by)
return bx > ax and bx < ax + aw and by > ay and by < ay + ah
end

All that this code does is checks if:

- the point’s X is greater then the rectangle’s X.
- The point’s X is less then the rectangle’s X + the rectangle’s width.
- the point’s Y is greater then the rectangle’s Y.
- the point’s Y is less then the rectangle’s Y + the rectangle’s height.

If these are all true, then it will return true, because the point is inside the rectangle.

The circle code is slightly more complex:

function CirclePoint(ax, ay, bx, by, ar)
local dx = bx - ax
local dy = by - ay
local dist = math.sqrt(dx * dx + dy * dy)
return dist < ar
end

This is essentially the same as the Distance Based Collision function that I wrote about in my previous post, except instead of taking 4 XY pairs and 2 radii, it takes 4 XY pairs and one radius, assuming that the other radius is zero.

For a example of these 2 functions in action, you can download the .love example file. Feel free to use these functions in any way you wish. If you want a license, use Creative Commons Zero. If you have any questions, just comment, and I’ll try to help.

### Like this:

Like Loading...

*Related*

Here’s a tip. Stop saying “love” when it’s just plain Lua. Only use it when your talking about anything related to love.

And by “love” i mean “löve” or Love2D.

Edited, but I’m still using the “Löve” tag because of the example.