Solved

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

Posted on 2004-10-14
5,802 Views
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.
0
Question by:kselvia
[X]
###### Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

• Help others & share knowledge
• Earn cash & points
• 3
• 3
• 2
• +1

LVL 92

Assisted Solution

objects earned 250 total points
ID: 12314433
0

LVL 12

Author Comment

ID: 12314848
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

LVL 92

Expert Comment

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

LVL 12

Author Comment

ID: 12315895
The part where I find the equation on the page.
0

LVL 92

Expert Comment

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

LVL 37

Accepted Solution

zzynx earned 250 total points
ID: 12316528
x1 = 14, y1 = 5
x2 = 16, y2 = 6

dx = 2
dy = 1
dr =  2.236

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

LVL 12

Author Comment

ID: 12317526
Yes I understand now. Thank you both very much.
0

LVL 21

Expert Comment

ID: 12317590
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

LVL 37

Expert Comment

ID: 12317614
Thanks for accepting
0

## Featured Post

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question