Vash_the_Stampede
11 уровень

Общие точки

Статья из группы Архив info.javarush
Есть две точки A(x1, y1) и B(x2, y2) и окружность радиуса R с центром в начале координат. нужна функция int count(double x1, y1, x2, y2, R), которая возвращает количество общих точек у отрезка AB и окружности (0, 1 или 2). Или хотя бы формула.
Комментарии (1)
ЧТОБЫ ПОСМОТРЕТЬ ВСЕ КОММЕНТАРИИ ИЛИ ОСТАВИТЬ КОММЕНТАРИЙ,
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ
0xFF Уровень 9
12 октября 2014
Берем формулы для составления уравнения прямой по 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;
}
Вроде бы работает. Но Вы перепроверьте всякие там подстановки и знаки, я наспех делал. Заодно и разберетесь ;-)