Входные данные
Шесть чисел – координаты центра и радиус окружности и коэффициенты A, B и C нормального уравнения прямой.
Выходные данные
В первой строке одно число K, равное количеству точек пересечения прямой с окружностью. Далее в K строках координаты самих точек.
Примеры
входные данные
2 3 1 1 -1 0
выходные данные
2
3.00000 3.00000
2.00000 2.00000

30 Авг 2019 в 06:42
359 +1
0
Ответы
1

Решение:

import math

def intersection_circle_line(circle_x, circle_y, radius, A, B, C):
K = 0
x1 = None
y1 = None
x2 = None
y2 = None

if A == 0:
y1 = -C / B
x1 = (B * circle_y + math.sqrt(B**2 * circle_y**2 - B**2 * (circle_y**2 - radius**2 + circle_x**2))) / B
x2 = (B * circle_y - math.sqrt(B**2 * circle_y**2 - B**2 * (circle_y**2 - radius**2 + circle_x**2))) / B
K = 2
elif B == 0:
x1 = -C / A
y1 = (A * circle_x + math.sqrt(A**2 * circle_x**2 - A**2 * (circle_x**2 - radius**2 + circle_y**2))) / A
y2 = (A * circle_x - math.sqrt(A**2 * circle_x**2 - A**2 * (circle_x**2 - radius**2 + circle_y**2))) / A
K = 2
else:
m = -A / B
c = -C / B
p = c - circle_x
q = circle_y
A = 1 + m**2
B = -2 * (circle_x - m * q - p * m)
C = p**2 + q**2 - radius**2
D = B**2 - 4 * A * C
if D > 0:
x1 = (-B + math.sqrt(D)) / (2 * A)
y1 = m * x1 + c
x2 = (-B - math.sqrt(D)) / (2 * A)
y2 = m * x2 + c
K = 2
elif D == 0:
x1 = -B / (2 * A)
y1 = m * x1 + c
K = 1
print(K)
if K >= 1:
print("{:.5f} {:.5f}".format(x1, y1))
if K == 2:
print("{:.5f} {:.5f}".format(x2, y2))Ввод данных

circle_x, circle_y, radius, A, B, C = map(int, input().split())

Вызов функции и вывод результата

intersection_circle_line(circle_x, circle_y, radius, A, B, C)

20 Апр в 06:08
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Название заказа не должно быть пустым
Введите email
Бесплатные доработки
Гарантированные бесплатные доработки
Быстрое выполнение
Быстрое выполнение от 2 часов
Проверка работы
Проверка работы на плагиат
Интересные статьи из справочника
Поможем написать учебную работу
Название заказа не должно быть пустым
Введите email
Доверьте свою работу экспертам
Разместите заказ
Наша система отправит ваш заказ на оценку 84 622 авторам
Первые отклики появятся уже в течение 10 минут
Прямой эфир