2016-12-26 2 views
1

J'ai un vecteur de coordonnées 3D qui doit être vérifié pour vale supérieure dans une grille de coordonnées 3DComment comparer deux coordonnées 3D en python

#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 en utilisant ce code qui est manifestement erronée, parce que son juste comparaison des première coordonnée x et ne pas le reste de 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 collée une grille 2d ici (3d suit la même logique). Nous commençons donc l'itération de la grille depuis la cellule (0,0) dans un ordre sériel. Comme vous pouvez le voir le bas & coordonnées plus pour le point v enter image description here

+0

Pouvez-vous définir plus clairement ce que vous entendez par valeur supérieure? distance de l'origine? la plus grande distance entre 2 des coordonnées données? –

+0

@jeffcarey a ajouté une description pic – vinita

Répondre

1

Essayez cette

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]