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

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

Решение:

import math

def intersection_circle_linecirclex,circley,radius,A,B,Ccircle_x, circle_y, radius, A, B, Ccirclex ,circley ,radius,A,B,C:
K = 0
x1 = None
y1 = None
x2 = None
y2 = None

if A == 0:
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))Bcircley +math.sqrt(B2circley 2B2(circley 2radius2+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))Bcircley math.sqrt(B2circley 2B2(circley 2radius2+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))Acirclex +math.sqrt(A2circlex 2A2(circlex 2radius2+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))Acirclex math.sqrt(A2circlex 2A2(circlex 2radius2+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 mqpm 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 * A2A y1 = m * x1 + c
x2 = −B−math.sqrt(D)-B - math.sqrt(D)Bmath.sqrt(D) / 2∗A2 * A2A y2 = m * x2 + c
K = 2
elif D == 0:
x1 = -B / 2∗A2 * A2A 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

20 Апр 2024 в 06:08
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Гарантированные бесплатные доработки в течение 1 года
Быстрое выполнение от 2 часов
Проверка работы на плагиат
Поможем написать учебную работу
Прямой эфир