Найти периметр многоугольника
Задание выглядит вот так:
Но возможно я что-то не так делаю, не подскажете?
from math import *
a = []
while True:
a.append(int(input()))
len = 0
n = len(a) / 2
print(n)
for i in range(1, n):
sum = (a[i] - a[i - 1]) ** 2
len += sum
i += 1
print(sqrt(l))
Ответы (2 шт):
Попробуйте извлекать квадратный корень из каждого члена суммы. Вы его, кажется, забыли.
Если это не поможет, то рецепт ниже.
Вам, для начала, нужно отсортировать точки по полярному углу, так как они могут быть заданы в разнобой. А потом, в порядке обхода, против часовой стрелки, например.
Представьте, что одна из точек лежит на оси x (M), другая точка -- P. Полярный угол -- fi. Теперь, пусть M := P. Возьмите следующую точку.
Полный пример :
Таким образом, Вам нужно перебрать [A1, A2, A3, A4, A5, A6, A7]. Заметим, если в какой-то момент, Вы будете выбирать не такую последовательность, то можете получить, например, в плюс к периметру ещё и [A5, A1].
Для того, чтобы посчитать полярный угол, вы можете воспользоваться скалярным произведением. Здесь есть несколько полезных функций и задач.
Так?
def len_seg(x1,y1,x2,y2):
return ((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2))**0.5
x = []
y = []
while True:
try:
x.append(int(input()))
y.append(int(input()))
except EOFError:
break
x.append(x[0])
y.append(y[0])
perimetr = 0
n = len(x)
for i in range(0, n-1):
perimetr += len_seg(x[i],y[i],x[i+1],y[i+1])
print(perimetr)
Главное - проще работать с x и y по отдельности. А дальше все просто - ищем длину каждого отрезка и суммируем. Добавив начальную точку еще и в конец массива.
Вы же вообще половину координат не обрабатываете, а те, что обрабатываете - суммируете странное значение (x-y)**2...



