2016-12-26 10 views
1

У меня есть вектор 3d координат, которые должны быть проверены на верхнюю юдоль в сетке 3d координатуКак сравнить два 3d координаты в питоне

#vector 
vec=[(.033,-.22,.98),(.5,-.9,.0029),(-.77,-.01,-.092),(.5,.2,.0029)] 

#grid 
x1 = np.linspace(-1,1,10) 
y1 = np.linspace(-1,1,10) 
z1 = np.linspace(-1,1,10) 

Im используя этот код, который явно не так, потому, что его просто сравнивая первые координаты й только и не остальные y, z

ctr=0 
for v in vec: 
    for i in x1: 
     for j in y1: 
      for k in z1: 
       if ctr==0: 
        temp=(i,j,k) 
        ctr+=1 
        continue 
       else: 
        #print temp, "to" ,i,j 
        temp2=(i,j,k) 
        if temp<=v<=temp2: 
         print "low,high",temp, temp2 
        temp=(i,j,k) 
        ctr+=1 
===WRONG OUTPUT====== 
low,high (-0.052631578947368474, 1.0, 1.0) (0.052631578947368363, -1.0, -1.0) 
low,high (0.47368421052631571, 1.0, 1.0) (0.57894736842105265, -1.0, -1.0) 
low,high (-0.78947368421052633, 1.0, 1.0) (-0.68421052631578949, -1.0, -1.0) 
low,high (0.47368421052631571, 1.0, 1.0) (0.57894736842105265, -1.0, -1.0) 

Ive наклеена 2d сетки здесь (3d будет следовать той же логике). Поэтому мы начинаем итерирование сетки из ячейки (0,0) в последовательном порядке. Как вы можете видеть ниже & выше координат для точки г enter image description here

+0

Можете ли вы более четко определить, что вы имеете в виду верхнее значение? расстояние от источника? наибольшее расстояние между двумя указанными координатами? –

+0

@jeffcarey добавлено описание pic – vinita

ответ

1

Попробуйте

for v in vec: 
    #for i in grid: 
    ctr=0 
    i=grid[0] 
    while(np.float64(v[0])>=i[0]): 
     ctr+=1 
     #print "in while" 
     i=grid[ctr] 
    #print "1st ctr",ctr, 
    c=0 
    high=200-(ctr%200) # Takes care that you find the limit within that line itself 
    while(np.float64(v[1])>=i[1] and c<high): 
     #print v, (i) 
     ctr+=1 
     i=grid[ctr] 
     c+=1 
    #print "2nd ctr",ctr, 
    print ctr,v,grid[ctr] 
Смежные вопросы