Входные данные Шесть чисел – координаты центра и радиус окружности и коэффициенты A, B и C нормального уравнения прямой. Выходные данные В первой строке одно число K, равное количеству точек пересечения прямой с окружностью. Далее в K строках координаты самих точек. Примеры входные данные 2 3 1 1 -1 0 выходные данные 2 3.00000 3.00000 2.00000 2.00000
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)
Решение:
import math
def intersection_circle_line(circle_x, circle_y, radius, A, B, C):
if A == 0:K = 0
x1 = None
y1 = None
x2 = None
y2 = None
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)