礼品包装算法索引超出索引 > 979 的范围
Gift Wrapping algorithm indexing out of range for index > 979
如上所述,我写了一个礼物包装算法:
def giftwrap(listPts):
"""Returns the convex hull vertices computed using the
giftwrap algorithm as a list of 'h' tuples
[(u0,v0), (u1,v1), ...]
"""
y = 99**99
#FINDING MIN Y-VAL POINT:
for i in range(0,len(listPts)):
if listPts[i][1] < y:
y = listPts[i][1]
lowPt = listPts[i]
k = i
listPts.append(lowPt) #pts[n] = Pk
n = len(listPts) -1
i = 0
v = 0
solution = []
while k != n:
listPts[i],listPts[k] = listPts[k],listPts[i]
minAngle = 361
solution.append(listPts[i])
for j in range(i+1,n+1):
angle = theta(listPts[i],listPts[j])
if(angle < minAngle and angle > v and listPts[j] != listPts[i]):
minAngle = angle
k = j
i = i+1
v = minAngle
return solution
对于小于 980 的点列表,它可以正常工作。在那个数字上,我收到以下行的错误:
listPts[i],listPts[k] = listPts[k],listPts[i]
我提出了一个 IndexError 并发现 i 值将变为 981(比列表的长度高 1)为什么它会出现在这个整数和比这个更高的整数上?
注意:我尝试在第 54 行放入以下 if 循环:
if i != n:
i = i+1
v = minAngle
else:
break
但是,这个returns解决方案作为所有顶点的列表。
谢谢
已修复。
我在我的 theta 函数中遗漏了 0 的情况:
if t == 0:
return 360.00
如上所述,我写了一个礼物包装算法:
def giftwrap(listPts):
"""Returns the convex hull vertices computed using the
giftwrap algorithm as a list of 'h' tuples
[(u0,v0), (u1,v1), ...]
"""
y = 99**99
#FINDING MIN Y-VAL POINT:
for i in range(0,len(listPts)):
if listPts[i][1] < y:
y = listPts[i][1]
lowPt = listPts[i]
k = i
listPts.append(lowPt) #pts[n] = Pk
n = len(listPts) -1
i = 0
v = 0
solution = []
while k != n:
listPts[i],listPts[k] = listPts[k],listPts[i]
minAngle = 361
solution.append(listPts[i])
for j in range(i+1,n+1):
angle = theta(listPts[i],listPts[j])
if(angle < minAngle and angle > v and listPts[j] != listPts[i]):
minAngle = angle
k = j
i = i+1
v = minAngle
return solution
对于小于 980 的点列表,它可以正常工作。在那个数字上,我收到以下行的错误:
listPts[i],listPts[k] = listPts[k],listPts[i]
我提出了一个 IndexError 并发现 i 值将变为 981(比列表的长度高 1)为什么它会出现在这个整数和比这个更高的整数上?
注意:我尝试在第 54 行放入以下 if 循环:
if i != n:
i = i+1
v = minAngle
else:
break
但是,这个returns解决方案作为所有顶点的列表。 谢谢
已修复。 我在我的 theta 函数中遗漏了 0 的情况:
if t == 0:
return 360.00