Centre of a circle that intersects two points

2019-05-04 18:19发布

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.

3条回答
做个烂人
3楼-- · 2019-05-04 19:06

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

查看更多
冷血范
4楼-- · 2019-05-04 19:08

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.

查看更多
登录 后发表回答