礼品包装算法索引超出索引的范围> 979

时间:2017-05-29 13:10:35

标签: python algorithm convex-hull

如上所述,我写了一个礼品包装算法:

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

但是,这会将解决方案作为列表返回为所有顶点。 感谢

1 个答案:

答案 0 :(得分:0)

固定。 我错过了我的theta函数中的0个案例:

 if t == 0:
    return 360.00