Найти в Дзене

Программирование на языке Python. Алгоритмы в геометрии на плоскости. Прямая и окружность

Доброго времени суток, читатели, зрители моего канала programmer's notes. Не забывайте подписываться и писать свои комментарии к моим статьям и видео.

Алгоритм поиска пересечения прямой и окружности

Продолжим наши алгоритмы по геометрии на плоскости. Напомню вот эту статью, где говорится об уравнении прямой по двум известным точкам, в том числе и варианты когда прямая параллельна одно из осей координат. Окружность же будет задаваться координатами центра и значением радиуса. При этом если тройка чисел есть a, b, r, то уравнение окружности будет

(x-a)**2 + (y-b)**2 == r*r

Уравнение прямой имеет вид

A*x + B*y + C = 0

Если даны две точки для определения прямой: (x1, y1), (x2, y2), то

A = (y1-y2)
B = (x2-x1)
C = (x2-x1), x2*y1-x1*y2

См. указанную ранее статью.

Выражаем x из уравнения, подставляем в уравнение окружности и решаем квадратное уравнение. Если есть два корня, то прямая пересекает окружность, если один, то прямая касается окружности, если корней нет, то прямая с окружностью никак не пересекается. Значения x получим из линейного уравнения.

В случае если прямая параллельна оси y, то уравнение будет просто

x = x1

если прямая параллельна оси x, то

y = y1

Мы подставляем значения в уравнение окружности и решаем опять же квадратное уравнение, которое опять может дать пересечение, касание и прямая не пересекает окружность.

Все варианты отражены в программе на рисунок 1

Рисунок 1. Программа определения точек пересечения прямой и окружности. Текст программы см. ниже по ссылке
Рисунок 1. Программа определения точек пересечения прямой и окружности. Текст программы см. ниже по ссылке
primer376.py

Например на входе

0 0 1 0.5
1 0 1

На выходе

Пересечение
1.6 0.8
0.0 0.0

Пояснение к программе

Функция res() решает квадратное уравнение и возвращает список, который может содержать или два корня. В случае, если список пуст, это значит корней нет.

Пока всё!

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

Вы бегаете по кругу, а я иду по прямой
Вы бегаете по кругу, а я иду по прямой