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

**0**

# Point inside of rectangle

Started by h3ro, Feb 20 2008 01:06 PM

10 replies to this topic

Sponsor:

###
#2
Members - Reputation: **2065**

Posted 20 February 2008 - 01:18 PM

Quote: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).

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

###
#4
Moderators - Reputation: **45761**

Posted 20 February 2008 - 03:03 PM

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.

A "point-in-axis-aligned-rectangle test" is just:

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;

}

###
#5
Crossbones+ - Reputation: **17462**

Posted 20 February 2008 - 03:05 PM

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)

* 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)

###
#9
Members - Reputation: **2065**

Posted 21 February 2008 - 08:47 AM

Quote: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 :).

Original post by h3ro

I used yours. It was the simplest and the I understood it :P

###
#11
Members - Reputation: **161**

Posted 23 February 2008 - 05:47 AM

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]

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]