Changeset 710


Ignore:
Timestamp:
Dec 15, 2004, 9:37:45 AM (20 years ago)
Author:
duncan
Message:

vanessa working on edge intervals array based

File:
1 edited

Legend:

Unmodified
Added
Removed
  • inundation/ga/storm_surge/alpha_shape/alpha_shape.py

    r691 r710  
    231231        return
    232232
    233  
     233    def _edge_intervals_array_based(self):
     234        # THIS DOESN'T WORK YET
     235
     236        # for each edge, find triples
     237        # (length/2, min_adj_triradius, max_adj_triradius) if unattached
     238        # (min_adj_triradius, min_adj_triradius, max_adj_triradius) if attached.
     239
     240        edges = []
     241        edgenbrs = []
     242        edgeinterval = []
     243
     244        x = self.points[:,0]
     245        y = self.points[:,1]
     246        ind0 = [self.deltri[j][0] for j in range(len(self.deltri))]
     247        ind1 = [self.deltri[j][1] for j in range(len(self.deltri))]
     248        ind2 = [self.deltri[j][2] for j in range(len(self.deltri))]
     249
     250        x0 = array([ x[j] for j in ind1 ])
     251        y0 = array([ y[j] for j in ind1 ])
     252        x1 = array([ x[j] for j in ind2 ])
     253        y1 = array([ y[j] for j in ind2 ])
     254        x2 = array([ x[j] for j in ind3 ])
     255        y2 = array([ y[j] for j in ind3 ])
     256
     257        dx0 = x1-x2
     258        dx1 = x2-x0
     259        dx2 = x0-x1
     260        dy0 = y1-y2
     261        dy1 = y2-y0
     262        dy2 = y0-y1
     263
     264        elen0 = sqrt(dx0*dx0 + dy0*dy0)
     265        elen1 = sqrt(dx1*dx1 + dy1*dy1)
     266        elen2 = sqrt(dx2*dx2 + dy2*dy2)
     267
     268        anglesgn0 = -dx1*dx2-dy1*dy2
     269        anglesgn1 = -dx2*dx0-dy2*dy0
     270        anglesgn2 = -dx0*dx1-dy0*dy1
     271
     272        # not sure how to convert the rest of the algorithm....
     273       
     274        for t in range(len(self.deltri)):
     275            tri = self.deltri[t]
     276            trinbr = self.deltrinbr[t]
     277                         
     278            for i in [0,1,2]:
     279                j = (i+1)%3
     280                k = (i+2)%3
     281                if trinbr[i]==-1:
     282                    edges.append((tri[j], tri[k]))
     283                    edgenbrs.append((t, -1))
     284                    edgeinterval.append([0.5*elen[i], self.triradius[t], INF])
     285                elif (tri[j]<tri[k]):
     286                    edges.append((tri[j], tri[k]))
     287                    edgenbrs.append((t, trinbr[i]))
     288                    edgeinterval.append([0.5*elen[i],\
     289                                         min(self.triradius[t],self.triradius[trinbr[i]]),\
     290                                             max(self.triradius[t],self.triradius[trinbr[i]]) ])
     291                else:
     292                    continue
     293                #if angle[i]>pi/2:
     294                if anglesign[i] < 0:
     295                    edgeinterval[-1][0] = edgeinterval[-1][1]
     296                   
     297        self.edge = edges
     298        self.edgenbr = edgenbrs
     299        self.edgeinterval = edgeinterval
     300        #print "edges: ",edges, "\n"
     301        #print "edge nbrs:", edgenbrs ,"\n"
     302        #print "edge intervals: ",edgeinterval , "\n"
     303
     304
    234305    def _edge_intervals(self):
    235306        # for each edge, find triples
Note: See TracChangeset for help on using the changeset viewer.