Я пытаюсь найти точки пересечения для круга с помощью этой ссылки.
В следующем примечании описывается, как найти точку (точки) пересечения двух окружностей на плоскости. Используются следующие обозначения. Цель состоит в том, чтобы найти две точки P3 = (x3, y3), если они существуют.
Сначала рассчитайте расстояние d между центрами кругов. d = ||P1 - P0||.
Если d > r0 + r1, то решений нет, кружки отдельные. Если d ‹ |r0 - r1| тогда решений нет, потому что один круг содержится внутри другого. Если d = 0 и r0 = r1, то окружности совпадают и существует бесконечное число решений. Рассматривая два треугольника P0P2P3 и P1P2P3, мы можем написать
a2 + h2 = r02 и b2 + h2 = r12
Используя d = a + b, мы можем найти a,
a = (r02 - r12 + d2 ) / (2 d)
Легко показать, что это сводится к r0, когда две окружности соприкасаются в одной точке, т.е.: d = r0 + r1 Решите для h, подставив a в первое уравнение, h2 = r02 - a2 Итак
P2 = P0 + a ( P1 - P0 ) / d
И, наконец, P3 = (x3,y3) через P0 = (x0,y0), P1 = (x1,y1) и P2 = (x2,y2), равно
x3 = x2 +- h ( y1 - y0 ) / d
y3 = y2 - + h ( x1 - x0 ) / d http://paulbourke.net/geometry/2circle/
b:=CircleMorph new.
b center: 60@60.
b openInWorld.
b1:=CircleMorph new.
b center: 100@100.
b1 openInWorld.
d:= b1 center - b center. // distance between 2 circles
r1:= (((b center x abs)squared +(b center y abs)squared)sqrt).
r2:= (((b1 center x abs)squared +(b1 center y abs)squared)sqrt).
r3:= r1+ r2.
(d) > (r3) ifTrue:[Transcript show:'Circles are seprate';cr]
Когда я сравниваю расстояние с суммой радиусов двух кругов, получается расстояние меньше, чем радиус обоих кругов, что, как я знаю, неверно, когда круги разделены. Правильно ли я вычисляю радиус или нет, с этой помощью возникает некоторая проблема.
//
не является началом комментария."Comments in Smalltalk look like this"
. - person Frank Shearar   schedule 23.09.2012