Дана окружность (координатами своего центра и радиусом) и прямая (своим уравнением). Требуется найти точки их пересечения (одна, две, либо ни одной).
- Решение
- Реализация
- Геометрия: окружности
- A: Расстояние от прямой до окружности
- B: Пересечение прямой и окружности
- C: Угол обзора
- D: Поворот точки
- E: Поворот прямой
- F: Точки касания
- G: Длина дуги
- H: Пересечение окружностей
- I: Ловушка для Слонопотама
- J: Воздушный шарик
- Python: проверить, пересекаются ли окружности двух окружностей или перекрываются
- Python Basic — 1: Упражнение 45 с решением
- 🎬 Видео
Видео:4.3 Пересечение отрезков. "Поколение Python": курс для начинающих. Курс StepikСкачать
Решение
Вместо формального решения системы двух уравнений подойдём к задаче с геометрической стороны (причём, за счёт этого мы получим более точное решение с точки зрения численной устойчивости).
Предположим, не теряя общности, что центр окружности находится в начале координат (если это не так, то перенесём его туда, исправив соответствующе константу C в уравнении прямой). Т.е. имеем окружность с центром в (0,0) радиуса r и прямую с уравнением Ax + By + C = 0.
Сначала найдём ближайшую к центру точку прямой — точку с некоторыми координатами (x0,y0). Во-первых, эта точка должна находиться на таком расстоянии от начала координат:
Во-вторых, поскольку вектор (A,B) перпендикулярен прямой, то координаты этой точки должны быть пропорциональны координатам этого вектора. Учитывая, что расстояние от начала координат до искомой точки нам известно, нам нужно просто нормировать вектор (A,B) к этой длине, и мы получаем:
(здесь неочевидны только знаки ‘минус’, но эти формулы легко проверить подстановкой в уравнение прямой — должен получиться ноль)
Зная ближайшую к центру окружности точку, мы уже можем определить, сколько точек будет содержать ответ, и даже дать ответ, если этих точек 0 или 1.
Действительно, если расстояние от (x0, y0) до начала координат (а его мы уже выразили формулой — см. выше) больше радиуса, то ответ — ноль точек. Если это расстояние равно радиусу, то ответом будет одна точка — (x0,y0). А вот в оставшемся случае точек будет две, и их координаты нам предстоит найти.
Итак, мы знаем, что точка (x0, y0) лежит внутри круга. Искомые точки (ax,ay) и (bx,by), помимо того что должны принадлежать прямой, должны лежать на одном и том же расстоянии d от точки (x0, y0), причём это расстояние легко найти:
Заметим, что вектор (-B,A) коллинеарен прямой, а потому искомые точки (ax,ay) и (bx,by) можно получить, прибавив к точке (x0,y0) вектор (-B,A), нормированный к длине d (мы получим одну искомую точку), и вычтя этот же вектор (получим вторую искомую точку).
Окончательное решение такое:
Если бы мы решали эту задачу чисто алгебраически, то скорее всего получили бы решение в другом виде, которое даёт бОльшую погрешность. Поэтому «геометрический» метод, описанный здесь, помимо наглядности, ещё и более точен.
Видео:Алгоритмы. Пересечение окружностейСкачать
Реализация
Как и было указано в начале описания, предполагается, что окружность расположена в начале координат.
Поэтому входные параметры — это радиус окружности и коэффициенты A,B,C уравнения прямой.
Видео:Алгоритмы. Пересечение отрезков.Скачать
Геометрия: окружности
A: Расстояние от прямой до окружности
Даны шесть чисел: координаты центра окружности, ее радиус (в первой строке), коэффициенты нормального уравнения прямой (во второй строке).
Выведите единственное число: расстояние от данной окружности до данной прямой.
Ввод | Вывод |
---|
B: Пересечение прямой и окружности
Даны шесть чисел: координаты центра окружности, ее радиус (в первой строке), коэффициенты нормального уравнения прямой (во второй строке).
В первой строке одно число K, равное количеству точек пересечения прямой с окружностью. Далее в K строках координаты самих точек.
Ввод | Вывод |
---|
C: Угол обзора
Даны пять чисел: координаты центра окружности, ее радиус (в первой строке), координаты точки (два действительных числа), лежащей вне окружности (во второй строке).
Выведите единственное число: угол (в радианах), под которым видна данная окружность из данной точки.
Ввод | Вывод |
---|
D: Поворот точки
Даны три числа: координаты точки и угол (в радианах, задан в виде действительного числа).
Выведите координаты точки, полученной поворотом данной точки вокруг начала координат на данный угол в положительном направлении.
Ввод | Вывод |
---|
E: Поворот прямой
Даны четыре числа: коээфициенты нормального уравнения прямой и угол (в радианах, задан в виде действительного числа).
Выведите три числа: коэффициенты нормального уравнения прямой, полученной поворотом данной прямой вокруг начала координат на данный угол в положительном направлении.
Ввод | Вывод |
---|
F: Точки касания
Даны пять чисел: координаты центра окружности, ее радиус (в первой строке), координаты точки (во второй строке).
Выведите одно число K, равное количеству точек пересечения всевозможных касательных к окружности, проходящих через данную точку. Далее в K строках координаты самих точек пересечения касательных с окружностью.
Ввод | Вывод |
---|
G: Длина дуги
Даны семь чисел – координаты центра и радиус окружности (в первой строке) и действительные координаты двух точек на ней (во второй и третьей строке), с точностью до пятого знака после запятой.
Выведите одно число: длину меньшей из дуг окружности, заключенной между указанными точками.
Ввод | Вывод |
---|
H: Пересечение окружностей
Даны шесть чисел – координаты центров и радиусы двух окружностей окружности.
В случае если количество общих точек окружностей конечно, в первой строке вывести одно число K, равное этому количеству, далее в K строках координаты самих точек. Если указанных точек бесконечно много, вывести единственное число «3».
Ввод | Вывод |
---|
I: Ловушка для Слонопотама
Пятачок и Винни-Пух каждое утро ходят пить чай в гости к Кролику. Естественно, самым коротким путем.
К сожалению, однажды Винни-Пуху пришла в голову идея вырыть ловушку для Слонопотама. Самое обидное, что они с Пятачком ее даже вырыли. Поэтому теперь каждое утро, идя в гости к Кролику, они боятся в нее провалиться.
Напишите программу, которая посчитает длину самого короткого безопасного пути от домика Винни-Пуха до домика Кролика.
Ловушка для Слонопотама представляет собой яму абсолютно круглой формы. Путь является безопасным, если он не проходит по ловушке (но может проходить по ее границе).
В первой строке входных данных записаны координаты домика Винни-Пуха (X_B), (Y_В), во второй строке — координаты домика Кролика (X_K), (Y_K), в третьей строке — координаты центра и радиус ловушки (X_L), (Y_L), (R_L). Все координаты — целые числа из диапазона от –32000 до 32000. Радиус ловушки — натуральное число, не превышающее 32000.
Домики Винни-Пуха и Кролика не могут находиться внутри ловушки, но могут находиться на ее границе.
Выведите в выходной файл одно число — длину самого короткого безопасного пути от домика Винни-Пуха до домика Кролика с тремя знаками после точки.
Ввод | Вывод |
---|
J: Воздушный шарик
Винни Пух и Пятачок отправились воровать мед у пчел, и, в очередной раз влипли в неприятности. Пятачку опять потребовалось выстрелить из своего охотничьего ружья и пробить воздушный шарик, на котором Винни Пух поднялся к дуплу за медом. При этом желательно попасть именно в шарик, не задев медведя. Вычислите оптимальную позицию для стрельбы.
Поскольку Винни Пух очень любит покушать, то в данной задаче (да и не только в задаче) примем его за сферу радиуса (P). Центр медведя находится на высоте (H_p) над уровнем земли. Строго над медведем , находится еще одна сфера, радиуса (S) — воздушный шарик; центр шарика находится на высоте (H_s) над уровнем земли. Центры обеих сфер находятся на одной вертикальной прямой. По понятным причинам гарантируется, что сферы не пересекаются, однако могут касаться.
Считая, что ружье стреляет строго по прямой, вычислите минимальное расстояние (L), на которое Пятачок должен отойти от места взлета, чтобы успешно поразить шарик. Шарик считается пораженным, если траектория пули хотя бы касается его поверхности; при этом если траектория пули касается медведя, то он считается невредимым.
Вводятся положительные целые числа (P), (H_p), (S) и (H_s), не превосходящие 10000.
Видео:15 Задача: Вычислить площадь и длину окружности круга при помощи PythonСкачать
Python: проверить, пересекаются ли окружности двух окружностей или перекрываются
Видео:Функции trunc, floor, ceil. Округление вверх и вниз в pythonСкачать
Python Basic — 1: Упражнение 45 с решением
Есть две окружности C1 с радиусом r1, центральной координатой (x1, y1) и C2 с радиусом r2 и центральной координатой (x2, y2)
Напишите программу на Python, чтобы проверить следующее:
- «C2 находится в C1», если C2 находится в C1
- «C1 находится в C2», если C1 находится в C2
- «Окружность С1 и С2 пересекаются», если пересекаются С1 и С2, и
- «C1 и C2 не перекрываются», если C1 и C2 не перекрываются.
Входные данные :
Входные числа (действительные числа) разделяются пробелом.
Иллюстрированная презентация:
Пример решения :
Код Python:
Блок — схема:
Редактор кода Python:
Есть другой способ решить это решение? Внесите свой код (и комментарии) через Disqus.
Каков уровень сложности этого упражнения?
🎬 Видео
Взаимное расположение окружности и прямой. 7 класс.Скачать
Python 3 #19: множества (set) и операции над ними: вычитание, пересечение, объединение, сравнениеСкачать
Определение точки пересечения окружности с прямойСкачать
Информатика. Вычислительная геометрия: Окружности. Центр онлайн-обучения «Фоксфорд»Скачать
Python. Вложенный цикл forСкачать
Пересечение списков. Совпадающие элементы двух списков. Решение задачи на Python.Скачать
Уроки Python с нуля / #6 – Циклы и операторы в них (for, while)Скачать
Python. Цикл forСкачать
Урок 3 Знакомство с объектами. Числа и операции над ними PythonСкачать
28 Вложенные циклы PythonСкачать
Python для начинающих. Урок 7 | Цикл whileСкачать
Python для начинающих. Урок 8 | Цикл forСкачать
Используем переменные окружения в pythonСкачать