# How to find coordinates of intersection of a line and a circle

Hello experts,

I have a circle plotted in x,y coordinates.  The center is at (14,5) with a radius of 5.

I have a point (*) at (16,6).  I need a formula to determine the x,y coordinates where
a line intersects the circle (at ? below) if drawn from the center of the circle through the point *.

y
|
|             .
|         .      ?.
|               *
|       .     @     .
|
|         .       .
|             .
|
+-------------------------x

The coordinates I gave are just an example, I need a formula to solve any center, radius and * point.

BTW: This is not a homework problem. If I had paid more attention in geometry though I would
proabably know how to do this.   This is not really a Java problem but I didn't know the
best forum to post it in.
LVL 12
###### Who is Participating?

Software engineerCommented:
x1 = 14, y1 = 5
x2 = 16, y2 = 6

dx = 2
dy = 1
dr =  2.236

D = 14*6-16*5 = 4
0

Commented:
0

RetiredAuthor Commented:
I saw that (and had actually already looked at it) and the answer is probably there someplace but I need it spelled out.

Given the data I have:  The center point, another point inside the circle, where will a line drawn from the center throug the point cross the circle.
0

Commented:
the equation is given on that page, which part is giving you problems?
0

RetiredAuthor Commented:
The part where I find the equation on the page.
0

Commented:
"gives the points of intersection as ..."
http://mathworld.wolfram.com/c1img3452.gif
0

RetiredAuthor Commented:
Yes I understand now. Thank you both very much.
0

Commented:
Something like this?

class Circle
{

...
/**
* Find the intersection of this circle with the line defined by point p1 & p2
public Point Intersect(Point p1, Point p2)
{
int dx=p2a.x-p1.x;
int dy=p2.y-p1.y;
int dr=Math.sqrt(dx*dx+dy*dy);
int D=p1.x*p2.y-p2.x*p1.y;
if (discriminant<0)
return null;  //No intersection;
else if (discriminant==0)
;//Tangant line there is only ONE intersection
else if (discriminant>0)
;//The line intersects at TWO points

//Compute intersection for ONE point (to compute intersection at OTHER point change + to a -)
int x=(D*dy+Math.sgn(dy)*dx*Math.sqrt(discriminant))/(dr*dr);
int y=(-D*dx+Math.abs(dy)*Math.sqrt(discriminant))/(dr*dr);
return new Point(x,y);
}
0

Software engineerCommented:
Thanks for accepting
0
Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.