Пересечение окружности и прямой python

Пересечение окружности и прямой

Дана окружность (координатами своего центра и радиусом) и прямая (своим уравнением). Требуется найти точки их пересечения (одна, две, либо ни одной).

Видео:4.3 Пересечение отрезков. "Поколение Python": курс для начинающих. Курс StepikСкачать

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) над уровнем земли. Центры обеих сфер находятся на одной вертикальной прямой. По понятным причинам гарантируется, что сферы не пересекаются, однако могут касаться.

Пересечение окружности и прямой python

Считая, что ружье стреляет строго по прямой, вычислите минимальное расстояние (L), на которое Пятачок должен отойти от места взлета, чтобы успешно поразить шарик. Шарик считается пораженным, если траектория пули хотя бы касается его поверхности; при этом если траектория пули касается медведя, то он считается невредимым.

Вводятся положительные целые числа (P), (H_p), (S) и (H_s), не превосходящие 10000.

Видео:15 Задача: Вычислить площадь и длину окружности круга при помощи PythonСкачать

15 Задача: Вычислить площадь и длину окружности круга при помощи Python

Python: проверить, пересекаются ли окружности двух окружностей или перекрываются

Видео:Функции trunc, floor, ceil. Округление вверх и вниз в 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:

Блоксхема:

Пересечение окружности и прямой python

Редактор кода Python:

Есть другой способ решить это решение? Внесите свой код (и комментарии) через Disqus.

Каков уровень сложности этого упражнения?

🎬 Видео

Взаимное расположение окружности и прямой. 7 класс.Скачать

Взаимное расположение окружности и прямой. 7 класс.

Python 3 #19: множества (set) и операции над ними: вычитание, пересечение, объединение, сравнениеСкачать

Python 3 #19: множества (set) и операции над ними: вычитание, пересечение, объединение, сравнение

Определение точки пересечения окружности с прямойСкачать

Определение точки пересечения окружности с прямой

Информатика. Вычислительная геометрия: Окружности. Центр онлайн-обучения «Фоксфорд»Скачать

Информатика. Вычислительная геометрия: Окружности. Центр онлайн-обучения «Фоксфорд»

Python. Вложенный цикл forСкачать

Python. Вложенный цикл for

Пересечение списков. Совпадающие элементы двух списков. Решение задачи на Python.Скачать

Пересечение списков. Совпадающие элементы двух списков. Решение задачи на Python.

Уроки Python с нуля / #6 – Циклы и операторы в них (for, while)Скачать

Уроки Python с нуля / #6 – Циклы и операторы в них (for, while)

Python. Цикл forСкачать

Python. Цикл for

Урок 3 Знакомство с объектами. Числа и операции над ними PythonСкачать

Урок 3 Знакомство с объектами. Числа и операции над ними Python

28 Вложенные циклы PythonСкачать

28 Вложенные циклы Python

Python для начинающих. Урок 7 | Цикл whileСкачать

Python для начинающих. Урок 7 | Цикл while

Python для начинающих. Урок 8 | Цикл forСкачать

Python для начинающих. Урок 8 | Цикл for

Используем переменные окружения в pythonСкачать

Используем переменные окружения в python
Поделиться или сохранить к себе: