Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- from itertools import combinations
- from math import sqrt, inf
- def create_line(x1, y1, x2, y2):
- """
- y = (k)x + (b)
- """
- try:
- k = round((y2 - y1)/(x2 - x1), 3)
- b = round((x2*y1 - x1*y2)/(x2 - x1), 3)
- except ZeroDivisionError:
- print("Деление на ноль.")
- else:
- return (k, b), (x1, y1, x2, y2)
- def check_three_dots(x1, y1, x2, y2, x3, y3):
- pair1, _ = create_line(x1, y1, x2, y2)
- pair2, _ = create_line(x2, y2, x3, y3)
- if pair1[0] == pair2[0] and pair1[1] == pair2[1]:
- return False
- return True
- def calculate_circle(x1, y1, x2, y2, x3, y3):
- ma = (y2 - y1)/(x2 - x1)
- mb = (y3 - y2)/(x3 - x2)
- x = round((ma*mb*(y1-y3) + mb*(x1 + x2) - ma*(x2 + x3))/(2*(mb - ma)), 3)
- if ma != 0:
- y = round((-(x-((x1 + x2)/2))/ma) + (y1+y2)/2, 3)
- else:
- y = round((-(x-((x2 + x3)/2))/mb) + (y2+y3)/2, 3)
- r = round(sqrt((x - x1)**2 + (y - y1)**2), 3)
- return x, y, r, (x1, y1, x2, y2, x3, y3)
- n = int(input("Введите кол-во точек: "))
- coordinates = []
- print(f"Введите {n} точек, задав координату в виде (x, y) - x, y (через пробел):")
- for _ in range(n):
- x, y = map(int, input().split())
- coordinates.append((x, y))
- comb_dots = list(combinations(coordinates, 3))
- min_radius = inf
- for comb in comb_dots:
- coord = *comb[0], *comb[1], *comb[2]
- if check_three_dots(*coord):
- result = calculate_circle(*coord)
- if min_radius > result[2]:
- min_radius = result[2]
- answer = 'Координаты центра окружности: ' + str(result[:2]) + ' Точки: ' + str(result[3])
- else:
- print("Данные точки лежат на одной прямой.", coord)
- if min_radius != inf:
- print("Радиус окружности: ", min_radius)
- print(answer)
- else:
- print("Ответа нет.")
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement