JavaRush /Java блог /Архив info.javarush /Общие точки Vash_the_Stampede 11 уровень 12 октября 2014 1493 views 1 comment Общие точки Статья из группы Архив 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; } Вроде бы работает. Но Вы перепроверьте всякие там подстановки и знаки, я наспех делал. Заодно и разберетесь ;-)
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ
И уравнение окружности:
Выразив из первого у через х и подставив во 2-е я получил:
Теперь для нахождения количества пересечений нужно решить квадратное уравнение, где b = 0. Получил вот такой код:
Вроде бы работает. Но Вы перепроверьте всякие там подстановки и знаки, я наспех делал. Заодно и разберетесь ;-)