Как создать список во вложенном цикле while при удалении индекса списка - PullRequest
0 голосов
/ 25 октября 2018

Я делаю программу с выпуклой оболочкой, используя jarvis march.

Моя проблема в том, что у меня есть формула, использующая правило правой руки, поэтому мне нужно 4 переменные (начальная точка, следующая точка, третья-х, третья-у) для формулы.Я планирую перебрать значения из списка заданных точек.Так что каждый цикл while, который у меня есть, - это способ итерации значений.

Проблема в том, что когда я создаю новый список в каждый момент времени, который я буду использовать для итерации каждой переменной, я использую .remove(), что приведет к отсутствиюдиапазон индексов, когда я запускаю его.Я знаю, что неправильно использовать .remove() в цикле, но я не могу найти способ решить эту проблему.

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

import math

a = [[1,2], [5,8], [-9,2], [0,-9], [4,0], [0,-4], [-1,-1]]

def orient(xa, ya, xb, yb, xc, yc):
  u=(yb-ya)*(xc-xb)-(yc-yb)*(xb-xa)
  if (u<0):
    return (1)
  if (u==0): 
    return (0)
  if (u>0): 
    return (-1)
l2=1
l3=1
l4=1
i=0
k=0
b=-1
ppoint=[]
startpoint=[-9,2]


while l2>0:
  a1=a
  a1.remove(startpoint)
  q=a1


   while l3>0:
    t=q
    nextpoint=t[k]
    t.remove(nextpoint)
    n=t

    while l4>0:
      thirdx=n[i][0]
      thirdy=n[i][1]
      if orient(startpoint[0],startpoint[1],nextpoint[0],nextpoint[1],thirdx,thirdy)>0:
       i+=1
       l4+=1
      if i==len(n):
       ppoint.append(nextpoint)
       print (ppoint)
       k+=1
       i=0
       break
      elif orient(startpoint[0],startpoint[1],nextpoint[0],nextpoint[1],thirdx,thirdy)<0:
       k+=1
       i=0
       break
      if k==len(q):
        startpoint=a[b]        
        b+=1
        break
if b==len(a):
  break
print (ppoint) 
...