Найти периметр многоугольника

Задание выглядит вот так:

введите сюда описание изображения

введите сюда описание изображения

Но возможно я что-то не так делаю, не подскажете?

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 шт):

Автор решения: hedgehogues

Попробуйте извлекать квадратный корень из каждого члена суммы. Вы его, кажется, забыли.

Если это не поможет, то рецепт ниже.

Вам, для начала, нужно отсортировать точки по полярному углу, так как они могут быть заданы в разнобой. А потом, в порядке обхода, против часовой стрелки, например.

введите сюда описание изображения

Представьте, что одна из точек лежит на оси x (M), другая точка -- P. Полярный угол -- fi. Теперь, пусть M := P. Возьмите следующую точку.

Полный пример :

введите сюда описание изображения

Таким образом, Вам нужно перебрать [A1, A2, A3, A4, A5, A6, A7]. Заметим, если в какой-то момент, Вы будете выбирать не такую последовательность, то можете получить, например, в плюс к периметру ещё и [A5, A1].

Для того, чтобы посчитать полярный угол, вы можете воспользоваться скалярным произведением. Здесь есть несколько полезных функций и задач.

→ Ссылка
Автор решения: Harry

Так?

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...

→ Ссылка