Центр круга, который пересекает две точки - PullRequest
4 голосов
/ 06 февраля 2011

Учитывая две точки в 2D-плоскости и круг радиуса r, который пересекает обе эти точки, какова будет формула для расчета центра этого круга?

Я понимаю, что в двух местах можно расположить круг. Я хотел бы, чтобы круг, центр которого встречался первым в направлении по часовой стрелке, подметал линию, соединяющую две точки вокруг одной из этих точек, начиная с произвольного угла. Я думаю, что это следующий этап в моей проблеме, после того, как я найду ответ на первую часть.

Я надеюсь, что весь расчет может быть выполнен без тригонометрии для скорости. Я начинаю с целочисленных координат и заканчиваю целочисленными, если это поможет.

Ответы [ 3 ]

6 голосов
/ 06 февраля 2011

Не уверен, что это правильное место, чтобы спросить это, но:

let:

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

первый круг:

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

Второй круг:

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

Здесь

2 голосов
/ 06 февраля 2011

A = (топор, ay)
B = (bx, by)
d = ((bx-ax) ^ 2 + (by-ay) ^ 2) ^ (1/2) # расстояниеот A до B
r = радиус вашего круга

, если (2 * r> d) нет решения в реальном мире - есть комплексное решение; -)

если (2 * r = d) есть одно решение: середина между A и B.

Нарисуйте линию от A до B.
Нарисуйте перпендикуляр от этой линии в средней точке и наружу.на расстояние D такое, что r = (D ^ 2 + (d / 2) ^ 2) ^ (1/2).Выберите влево или вправо в зависимости от того, что вы хотите.

2 голосов
/ 06 февраля 2011
...