Sign in to follow this  
h3ro

Point inside of rectangle

Recommended Posts

h3ro    161
Hallo, How can I check if a point is inside a rectangle? The rectangle has been rotated, so I cant simply compare the point to the vertexes (I think). Thanks in advance

Share this post


Link to post
Share on other sites
jyk    2094
Quote:
Original post by h3ro
Hallo,

How can I check if a point is inside a rectangle? The rectangle has been rotated, so I cant simply compare the point to the vertexes (I think).

Thanks in advance
Short answer: transform the point into the local space of the rectangle, and then perform a point-in-axis-aligned-rectangle test (which is straightforward).

Share this post


Link to post
Share on other sites
h3ro    161
Sorry for being dump here, but could you please explain a bit more? Math is not really my strongest side. Tried google, but couldnt find anything for "point-in-axis-aligned-rectangle test"

Share this post


Link to post
Share on other sites
Hodgman    51324
Another method:
If you know where the corners of the rectangle are, you can deduce the equation for the four line-segments that make up the edges, which you can then use to determine the normals of each of the edges.

Get the dot-product of the edge-normal and the vector formed from any point on the line to your test-point, this will tell you which side of the line the point is on.
If the point is on the 'inside' of all of the lines, it's inside the box.



Quote:
Original post by h3ro
Sorry for being dump here, but could you please explain a bit more? Math is not really my strongest side. Tried google, but couldnt find anything for "point-in-axis-aligned-rectangle test"

A "point-in-axis-aligned-rectangle test" is just:
bool Inisde( x, y, l, r, b, t )//x,y are the point, l,r,b,t are the extents of the rectangle
{
return x > l && x < r && y > b && y < t;
}

Share this post


Link to post
Share on other sites
alvaro    21263
Another answer:
* P is the point.
* C is a corner of the rectangle.
* v1 and v2 are the two vectors that define the sides (with C as origin).
* v = P-C

P is in the rectangle if and only if
0<=dot_product(v,v1)<=dot_product(v1,v1) and 0<=dot_product(v,v2)<=dot_product(v2,v2)

Share this post


Link to post
Share on other sites
jyk    2094
Quote:
Original post by h3ro
I used yours. It was the simplest and the I understood it :P
Just for the record, the solution proposed by alvaro is the same as the one I proposed in the first reply to your thread (alvaro, however, was kind enough to spell out the details for you :).

Share this post


Link to post
Share on other sites
Boder    938
Then it's all the same solution on this page!

V is converting to the local space, and uses the dot products for the point-in-rectangle test?

But the dot products are not really necessary if it's AABB, you could use the Hodgman method.

Share this post


Link to post
Share on other sites
h3ro    161
For some reason I cant get I to work anymore. Right now it is only drawing half the bounding box. Any ideas on why?

EDIT:
Fooling around for ever fixed it. Not really sure what it was though, but working now :)

[Edited by - h3ro on February 23, 2008 4:47:38 PM]

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

Sign in to follow this