Given a square (described by x, y, width, height) and an angle (in radians) I need to calculate a vector that originates at the squares centre and terminates at the point that collides with the edge of the square at the given angle.
I’m really most interested in the point it collides at so if that would make calculation more efficient let me know.
Can this be generalized to Rectangles? How about polygons in general?
The vector will be
center + (cos(angle), sin(angle))*magnitude. Given that you want to intersect this with a square, you need to determine magnitude. You can get that with a square with:However, cos(angle) or sin(angle) could be zero, so you should cross multiply that out to get:
And you can trivially get the end point from that.
EDIT: Here’s a snippet you can drop in place to verify this works with the currently accepted answer:
Clearly this is applies to an axis aligned rectangle. You can do something similar by finding the closest intersection between the testing vector and every edge in a polygon. (You can optimize that further, but that’s left as an exercise to the reader.)