На самом деле я поторопился.
Система квадратных уравнений в общем виде может и решается, но получаются громоздкие формулы (я даже их не рассматривал).
По условию моей задачи радиусы двух окружностей одинаковые R1=R2=R.
Исходные уравнения: (x-xc1)^2 + (y-yc1)^2=R (x-xc2)^2 + (y-yc2)^2=R
где xc1,yc1, xc2, yc2 – координаты центров окружностей. Алгоритм нахождения точек пересечения двух окружностей таков:
центр одной из окружностей смещается в начало координат и решается простая система уравнений:
x^2 + y^2 = R (x – A)^2 + y^2 = R
где А – расстояние между центрами окружностей
Т.е. решается упрощенная система квадратных уравнений в системе координат, которая смещена по оси X на xc1 (или xc2), а по оси Y на yc1 (или yc2) , и повернута на некоторый угол ф, относительно исходной системы координат.
Решение упрощенной системы уравнений: x1’ = A/2; y1’ = + sqrt(R^2 – (А^2/4)) x2’ = A/2; y2’ = - sqrt(R^2 – (А^2/4))
Затем переводим решение в исходную систему координат по формулам:
Если система координат была повернута на положительный угол ф (против хода часов): x = a + x’*cosф – y’*sinф y = b + x’*sinф + y’*cosф
Если система координат была повернута на отрицательный угол ф (по ходу часам): x = a + x’*cosф + y’*sinф y = b - x’*sinф + y’*cosф
где: a = xc1, b = yc1 или a = xc2, b = yc2 А = sqrt(dx^2 + dy^2) sinф = dy/A cosф = dx/A dx = abs(xc1 – xc2) dy = abs(yc1 – yc2)
Решение такой простецкой задачи может понадобиться, например, при реализации на процессоре алгоритмов круговой интерполяции в станках с ЧПУ (перемещение фрезы по дуге - команды G02 и G03) . В результате находятся координаты центра радиуса, по которому нужно перемещаться из исходной точки (xc1,yc1) в конечную (xc2,yc2).
|