Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Centre of a circle that intersects two points

Given two points in a 2D plane, and a circle of radius r that intersects both of those points, what would be the formula to calculate the centre of that circle?

I realise there would two places the circle can be positioned. I would want the circle whose centre is encountered first in a clockwise direction when sweeping the line that joins the two points around one of those points, starting from an arbitrary angle. I guess that is the next stage in my problem, after I find an answer for the first part.

I'm hoping the whole calculation can be done without trigonometry for speed. I'm starting with integer coordinates and will end with integer coordinates, if that helps.

like image 549
Jason Avatar asked Dec 17 '22 17:12

Jason


2 Answers

Not sure if this is the right place to ask this but:

let:

q = sqrt((x2-x1)^2 + (y2-y1)^2)
x3 = (x1+x2)/2
y3 = (y1+y2)/2

first circle:

x = x3 + sqrt(r^2-(q/2)^2)*(y1-y2)/q
y = y3 + sqrt(r^2-(q/2)^2)*(x2-x1)/q  

Second Circle:

x = x3 - sqrt(r^2-(q/2)^2)*(y1-y2)/q
y = y3 - sqrt(r^2-(q/2)^2)*(x2-x1)/q  

Here

like image 165
Luis Avatar answered Feb 12 '23 07:02

Luis


A=(ax, ay)
B=(bx, by)
d=((bx-ax)^2 + (by-ay)^2)^(1/2) # distance from A to B
r=radius of your circle

if (2*r>d) there is no solution in the real world - there is a complex solution ;-)

if (2*r=d) there is one solution : the middle between A and B.

Draw a line from A to B.
Draw the perpendicular from that line at the mid-point and out to a distance D such that r=(D^2 + (d/2)^2)^(1/2). Pick left or right depending on what you want.

like image 37
asoundmove Avatar answered Feb 12 '23 07:02

asoundmove