我有一个点列表:
a = [(2,4),(34,53),(34,2),(84,64)]
这些点按顺时针顺序列出,它们形成一个多边形。我需要找到多边形的周长,它是相邻点之间距离的总和。我必须使用距离公式来找到距离,因此它必须是(2,4)
和(34,53)
之间的距离,然后是(34,53)
和(34,2)
之间的距离等等。
我如何编写这个for循环,使用距离公式来使用第一个元素和第二个元素的点,然后当移动到第二个和第三个元素,依此类推,最后当它在最后元素,它使用最后一个元素和第一个元素的距离公式..有点像自动换行?
答案 0 :(得分:3)
更简单的for循环只是:
>>> for i in range(len(a)):
print a[i-1], a[i]
(84, 64) (2, 4)
(2, 4) (34, 53)
(34, 53) (34, 2)
(34, 2) (84, 64)
答案 1 :(得分:0)
使用模数除法来计算指数。例如,如果您有一个长度为n的点列表,并且j是您的索引,那么您可以使用j = (j+1)%n
计算包装索引。
答案 2 :(得分:0)
import math
def poly_peri():
a = [(2,4),(34,53),(34,2),(84,64)]
# Intializing perimeter to be 0
perimeter = 0
# MAIN LOOP
#[len(a) - 1] because we dont want to continue after the last number
for i in range(len(a) - 1):
distance = ((a[i + 1][0] - a[i][0])**2 + (a[i+1][1] - a[i][1])**2)
perimeter += math.sqrt(distance)
return perimeter
您还可以使用多边形的点列表作为函数poly_peri(a)的参数。意思是,当你调用函数poly_peri()时,你会把它称为poly_peri([(2,4),(34,53),(34,2),(84,64)])。对于你作为参数放置的内容,这将输出相同的结果。代码看起来像
import math
def poly_peri(a):
points = a
# Intializing perimeter to be 0
perimeter = 0
# MAIN LOOP
#[len(points) - 1] because we dont want to continue after the last number
a.append(a[0])
for i in range(len(points) - 1):
distance = ((points[i + 1][0] - points[i][0])**2 + (points[i+1][1] - points[i][1])**2)
perimeter += math.sqrt(distance)
return perimeter
答案 3 :(得分:0)
会计"否定"距离
import math
perimeter = 0
a = [(2,4),(34,53),(34,2),(84,64)]
for i in range(len(a)):
k = i+1 if (i<len(a)-1) else 0
x,y = a[i]
x2,y2 = a[k]
edge = math.fabs(math.sqrt(math.pow(y2-y, 2) + math.pow(x2-x,2)))
print("""Edge {}: {}""".format(i,edge))
perimeter += edge
# when run
Edge 0: 58.52349955359813
Edge 1: 51.0
Edge 2: 79.64923100695951
Edge 3: 101.6070863670443
>>> print("""Perimeter: {}""".format(perimeter))
Perimeter: 290.7798169276019