Входные данные Шесть чисел – координаты центра и радиус окружности и коэффициенты A, B и C нормального уравнения прямой. Выходные данные В первой строке одно число K, равное количеству точек пересечения прямой с окружностью. Далее в K строках координаты самих точек. Примеры входные данные 2 3 1 1 -1 0 выходные данные 2 3.00000 3.00000 2.00000 2.00000
Решение:
import math
def intersection_circle_linecirclex,circley,radius,A,B,Ccircle_x, circle_y, radius, A, B, Ccirclex ,circley ,radius,A,B,C:
if A == 0:K = 0
x1 = None
y1 = None
x2 = None
y2 = None
y1 = -C / B
x1 = B∗circley+math.sqrt(B∗∗2∗circley∗∗2−B∗∗2∗(circley∗∗2−radius∗∗2+circlex∗∗2))B * circle_y + math.sqrt(B**2 * circle_y**2 - B**2 * (circle_y**2 - radius**2 + circle_x**2))B∗circley +math.sqrt(B∗∗2∗circley ∗∗2−B∗∗2∗(circley ∗∗2−radius∗∗2+circlex ∗∗2)) / B
x2 = B∗circley−math.sqrt(B∗∗2∗circley∗∗2−B∗∗2∗(circley∗∗2−radius∗∗2+circlex∗∗2))B * circle_y - math.sqrt(B**2 * circle_y**2 - B**2 * (circle_y**2 - radius**2 + circle_x**2))B∗circley −math.sqrt(B∗∗2∗circley ∗∗2−B∗∗2∗(circley ∗∗2−radius∗∗2+circlex ∗∗2)) / B
K = 2
elif B == 0:
x1 = -C / A
y1 = A∗circlex+math.sqrt(A∗∗2∗circlex∗∗2−A∗∗2∗(circlex∗∗2−radius∗∗2+circley∗∗2))A * circle_x + math.sqrt(A**2 * circle_x**2 - A**2 * (circle_x**2 - radius**2 + circle_y**2))A∗circlex +math.sqrt(A∗∗2∗circlex ∗∗2−A∗∗2∗(circlex ∗∗2−radius∗∗2+circley ∗∗2)) / A
y2 = A∗circlex−math.sqrt(A∗∗2∗circlex∗∗2−A∗∗2∗(circlex∗∗2−radius∗∗2+circley∗∗2))A * circle_x - math.sqrt(A**2 * circle_x**2 - A**2 * (circle_x**2 - radius**2 + circle_y**2))A∗circlex −math.sqrt(A∗∗2∗circlex ∗∗2−A∗∗2∗(circlex ∗∗2−radius∗∗2+circley ∗∗2)) / A
K = 2
else:
m = -A / B
c = -C / B
p = c - circle_x
q = circle_y
A = 1 + m**2
B = -2 * circlex−m∗q−p∗mcircle_x - m * q - p * mcirclex −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)-B + math.sqrt(D)−B+math.sqrt(D) / 2∗A2 * A2∗A y1 = m * x1 + c
x2 = −B−math.sqrt(D)-B - math.sqrt(D)−B−math.sqrt(D) / 2∗A2 * A2∗A y2 = m * x2 + c
K = 2
elif D == 0:
x1 = -B / 2∗A2 * A2∗A y1 = m * x1 + c
K = 1
printKKK if K >= 1:
print":.5f:.5f".format(x1,y1)"{:.5f} {:.5f}".format(x1, y1)":.5f:.5f".format(x1,y1) if K == 2:
print":.5f:.5f".format(x2,y2)"{:.5f} {:.5f}".format(x2, y2)":.5f:.5f".format(x2,y2)Ввод данных
circle_x, circle_y, radius, A, B, C = mapint,input().split()int, input().split()int,input().split()
Вызов функции и вывод результатаintersection_circle_linecirclex,circley,radius,A,B,Ccircle_x, circle_y, radius, A, B, Ccirclex ,circley ,radius,A,B,C