Как сделать так, чтобы код выводил сами координаты двух точек, между которыми наибольшее расстояние, помимо самого расстояния
На плоскости заданы своими координатами n точек. Составить функцию, определяющую между какими из пар точек самое большое расстояние. Указание: координаты точек занести в массив.
from math import sqrt
import random as rnd
def s(x1, y1, x2, y2):
sec = sqrt((x2 - x1)**2 + (y2 - y1)**2)
return sec
n = int(input("Введите количество строк: "))
mass = []
row = []
for i in range(n):
for i in range(2):
row.append(rnd.randint(1,99))
mass.append(row)
row = []
for i in range(n):
for j in range(2):
print(mass[i][j], end=' ')
print()
max=0
for i in range(n):
for j in range(n):
l=int(s(mass[i][0], mass[i][1], mass[j][0], mass[j][1]))
if max < l:
max = l
print(max)
Ответы (2 шт):
Автор решения: Zhihar
→ Ссылка
когда взял у друга пример, потому что в понедельник сдавать задачу, но питон не учил от слова совсем? :)
from math import sqrt
import random as rnd
def s(point1, point2):
return sqrt((point1[0] - point2[0])**2 + (point1[1] - point2[1])**2)
n = int(input("Введите количество строк: "))
mass = [(rnd.randint(1,99), rnd.randint(1,99)) for i in range(n)]
[print(*obj) for obj in mass]
max = 0
max_index = [0, 0]
for i in range(n):
for j in range(i + 1, n):
l = s(mass[i], mass[j])
if max < l:
max = l
max_index = [i, j]
print(f"{int(max)}: p1: {mass[max_index[0]]}, p2: {mass[max_index[1]]}")
Автор решения: Be3y4uu_K0T
→ Ссылка
Используя itertools.combinations создадим список всех пар точек. Далее, вычислим максимальную пару точек по дистанции, используя функцию max с нашим "ключом", т.е. функцией, которая вычисляет дистанцию между точками. Функция принимает пару точек и возвращает дистанцию между ними.
Вот Ваш код:
import itertools
import random
import math
def distance(points: tuple[tuple[int, int], tuple[int, int]]) -> float:
(x1, y1), (x2, y2) = points
return math.sqrt((x1 - x2)**2 + (y1 - y2)**2)
n = int(input('Введите количество точек: '))
array = [(random.randint(1,99), random.randint(1,99)) for _ in range(n)]
print(array)
print(max(itertools.combinations(array, 2), key=distance))