Advertisement Jump to content
Sign in to follow this  

Line Circle Intersection Problem

This topic is 4969 days old which is more than the 365 day threshold we allow for new replies. Please post a new topic.

If you intended to correct an error in the post then please contact us.

Recommended Posts

Hi, given a circle with radius r at P which intersect a line segment CA, see picture pls.. How can I get vector AB (line normal from A which intersect circle at B) ?? Before you think I'm asking this to answer my math homework, please rest assure that I'm not (okay, I kinda suck at math) :D, I'll use vector AB to push the circle so that it will always stays at the edge of the line.. it's for my game, in case you're wondering... The common line circle intersection/collision detection computes can't work in my case cause it needs two intersection point and calculates the push vector from a line normal that crosses the center of circle. Anyway.. any hint on how I can calculate (I'll follow up your hint, I hope i still got something left in my brain) that AB vector will be very appreciated thanks

Share this post

Link to post
Share on other sites

but to see if a static circle intersects a static segment, you only need to see if the length of the projection of P onto CA is greater than r

assumuning C and A are the coordinate of the segment

C + ( dot(P-C, A-C)/|A-C|^2 ) * (A - C) is the projection of P onto CA


dot(P-C, A-C)/|A-C|^2 is letting C be the origin by subtracting C from all points

and finding (|P|*cos(angle of P using C as origin))/ |A|

so letting t = dot(P-C, A-C)/|A-C|^2
and again just find if |C+t(A-C)| < r and the circle intersects the segment

edit i misread what you were saying

Share this post

Link to post
Share on other sites
It's not a problem wether to test the circle has collide with line segment or not. That I'm pretty much covered, all I need to find is either point B or vector AB.

Share this post

Link to post
Share on other sites
well since

|C + t*(A-C)| = r is the point of intersection

|C + t * ( A-C)|^2 - r^2 = 0 is an equivilant expresion

since |V|^2 = dot(V, V)

|C + t * ( A-C)|^2 - r^2 = 0 is a quadratic expresion of t

solve for t using A and C as an infinite line perendicular to the origial

and plug the t's in back into C+t(A-C) to find the points of intersection

***just a note its not so clear but let A and C in this post be a perpendicular line to the original so C = (-C.y, C.x), A = (-A.y, A.x)

*** edit again theirs definatly something wrong with this. but if i think about it i cant figure it out myself right now. but try putting The perp into the intersect equation and see if you can come up with a way to spit out 2 numbers !
im not taking into account the center of the circle in what i did but i think the solution will be similar.

[Edited by - Raymond_Porter420 on June 14, 2005 1:26:41 PM]

Share this post

Link to post
Share on other sites
from what you say I am assuming that you want AC and AB to be the samer length.
calculate distance of AC and call it u
(x - Ax)2 + (y - Ay)2 = u
but we can also say
(x - Px)2 + (y - Py)2 = d
where P is the center of the circle. so now its simply a matter of solving them
to get 2 terms.

i'm too tired to solve atm. i'll finish tommorow, but theres a starting point.

Share this post

Link to post
Share on other sites
thx guys, I solved it ,
first we need to find the length of AB

to get the vector AB, we need a normal vector from AC and multiply it with the length we just calculate..

so simple.. i'm ashamed of myself :(

Share this post

Link to post
Share on other sites
Sign in to follow this  

  • Advertisement

Important Information

By using, you agree to our community Guidelines, Terms of Use, and Privacy Policy. is your game development community. Create an account for your GameDev Portfolio and participate in the largest developer community in the games industry.

Sign me up!