Есть две точки A(x1, y1) и B(x2, y2) и окружность радиуса R с центром в начале координат. нужна функция int count(double x1, y1, x2, y2, R), которая возвращает количество общих точек у отрезка AB и окружности (0, 1 или 2). Или хотя бы формула.
Берем формулы для составления уравнения прямой по 2-м точкам:
И уравнение окружности:
Выразив из первого у через х и подставив во 2-е я получил:
Теперь для нахождения количества пересечений нужно решить квадратное уравнение, где b = 0. Получил вот такой код:
public static int count(double x1, double y1, double x2, double y2, double R) {
if ( (x1 == x2) || (y1 == y2) ||
(x1 + x2 == 0) || (y1 + y2 == 0))
return 0;
double a = Math.pow((y2 - y1)/(x2 + x1), 2) + 1;
double b = 0;
double c = Math.pow((x1*y2+y1*x2-2*x1*y1)/(x2 + x1), 2) - R*R;
double d = b*b - 4*a*c;
if (d == 0)
return 1;
else if (d > 0)
return 2;
else
return 0;
}
Вроде бы работает. Но Вы перепроверьте всякие там подстановки и знаки, я наспех делал. Заодно и разберетесь ;-)
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ
И уравнение окружности:
Выразив из первого у через х и подставив во 2-е я получил:
Теперь для нахождения количества пересечений нужно решить квадратное уравнение, где b = 0. Получил вот такой код:
Вроде бы работает. Но Вы перепроверьте всякие там подстановки и знаки, я наспех делал. Заодно и разберетесь ;-)