В первом примере ни одной линии не проведено, плоскость на части не разделилась.
Во втором примере проведено две прямые и три окружности. Плоскость разделилась на 16
частей, как показано на рисунке.
Ввод
Вывод
0
0
1
2
3
16
python
import sys
# функция для определения пересечения двух точек прямой
def intersect(a, b):
return (a[1] - b[1])/(b[0] - a[0])
# функция для определения пересечения прямой и окружности
def intersect_circle(line, circle):
x1, y1, x2, y2 = line
# проверяем, пересекается ли прямая с окружностью
if ((circle[0] - x1)**2 + (circle[1] - y1)**2) ** 0.5 < circle[2] and ((circle[0] - x2)**2 + (circle[1] - y2)**2) ** 0.5 > circle[2]:
return True
if ((circle[0] - x1)**2 + (circle[1] - y1)**2) ** 0.5 > circle[2] and ((circle[0] - x2)**2 + (circle[1] - y2)**2) ** 0.5 < circle[2]:
return True
return False
# функция для разделения плоскости на части
def divide_plane(lines, circles):
# начальное разделение плоскости
parts = 1
# проходим по всем прямым
for line in lines:
# проходим по всем уже проведенным прямым
for i in range(len(lines)):
# проверяем, пересекается ли текущая прямая с уже проведенными прямыми
if i != lines.index(line) and intersect(line, lines[i]):
parts += 1
# проходим по всем окружностям
for circle in circles:
# проверяем, пересекается ли текущая прямая с окружностью
if intersect_circle(line, circle):
parts += 1
# проходим по всем окружностям
for circle in circles:
# проходим по всем уже проведенным окружностям
for i in range(len(circles)):
# проверяем, пересекается ли текущая окружность с уже проведенными окружностями
if i != circles.index(circle) and intersect_circle(circle, circles[i]):
parts += 2
return parts
# считываем данные из входного потока
lines_count, circles_count = map(int, input().split())
lines = []
circles = []
# считываем данные о прямых
for i in range(lines_count):
params = list(map(int, input().split()))
lines.append(params)
# считываем данные об окружностях
for i in range(circles_count):
params = list(map(int, input().split()))
circles.append(params)
# вызываем функцию разделения плоскости на части
result = divide_plane(lines, circles)
# выводим результат
print(result)
Пример работы программы:
Входные данные:
3 2
line 1 5 8 10
line 2 12 9 4
line 10 5 8 6
circle 4 4 5
circle 9 8 3
Выходные данные:
16
Таким образом, в результате проведения трех прямых и двух окружностей плоскость разделилась на 16 частей.Нажимая «Регистрация» или «Войти через Google», вы соглашаетесь с Публичной офертой, даете Согласие на обработку персональных данных, а также подтверждаете что вам есть 18 лет
Нажимая «Регистрация» или «Войти через Google», вы соглашаетесь с Публичной офертой, даете Согласие на обработку персональных данных, а также подтверждаете что вам есть 18 лет