Changeset 1134

Show
Ignore:
Timestamp:
11/21/08 09:25:37 (2 months ago)
Author:
bhimebau
Message:

interpolated display running

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • analog/pyeac/trunk/eeepc/eacmesh.py

    r1133 r1134  
    1717        self.xdim = xdim 
    1818        self.ydim = ydim 
    19         self.xrange = numpy.arange(0,5,1) 
    20         self.yrange = numpy.arange(0,5,1) 
    21         self.xstep = 5.0/self.xdim 
    22         self.ystep = 5.0/self.ydim 
    23         self.mesh = numpy.zeros(self.xdim*self.ydim).reshape(self.xdim,self.ydim) 
     19        self.xrange = numpy.arange(0,5.1,5.0/4.0) 
     20        self.yrange = numpy.arange(0,5.1,5.0/4.0) 
     21        self.xstep = 5.0/(self.xdim-1) 
     22        self.ystep = 5.0/(self.ydim-1) 
     23        self.vmax = 5.0 
     24        self.vmin = 0.0 
    2425 
    2526    def update(self,eacdata): 
    2627        self.outgrid = RectBivariateSpline(self.xrange,self.yrange,eacdata) 
    27         for x in range(self.xdim): 
    28             for y in range(self.ydim): 
    29                 self.mesh[x,y] = self.outgrid(x*self.xstep, y*self.ystep) 
    30         return self.mesh 
     28        mesh = [] 
     29        vmax_temp = 0 
     30        vmin_temp = 10 
     31        for y in range(self.ydim): 
     32            row = [] 
     33            for x in range(self.xdim): 
     34                vtemp = self.outgrid(x*self.xstep, y*self.ystep) 
     35                if vtemp > vmax_temp: 
     36                    vmax_temp = vtemp 
     37                elif vtemp < vmin_temp: 
     38                    vmin_temp = vtemp 
     39                row.append(self.color_transform(vtemp)) 
     40            mesh.append(row) 
     41#        self.vmax = vmax_temp 
     42#        self.vmin = vmin_temp 
     43        return mesh 
     44 
     45    def color_transform(self, vdata): 
     46        span = self.vmax - self.vmin 
     47        vnorm = float((vdata - self.vmin)/span) 
     48        if vnorm > 1: 
     49            vnorm = 1 
     50        elif vnorm < 0: 
     51            vnorm = 0 
     52        vnorm = 255.0 * vnorm  
     53        return ((vnorm,vnorm,vnorm)) 
     54#        vnorm *= 16777215 
     55#        vnorm = int(vnorm) 
     56#        red = 16711680 & vnorm 
     57#        red >>= 16 
     58#        green = 65280 & vnorm  
     59#        green >>= 8 
     60#        blue = 255 & vnorm 
     61#        print red,green,blue 
     62#        return ((red,green,blue)) 
    3163 
    3264if __name__ == '__main__': 
    33     edata = numpy.arange(25).reshape(5,5) 
     65    edata = numpy.arange(0,5,5.0/25).reshape(5,5) 
    3466    meac = EacMesh(30,30) 
    3567    print meac.update(edata) 
  • analog/pyeac/trunk/eeepc/visualizer.py

    r1110 r1134  
    88from numpy import arange,zeros 
    99from scipy import mgrid, interpolate 
     10from eacmesh import EacMesh 
    1011 
    1112class Visualizer: 
     
    1516        self.fill_color = (0,0,0) 
    1617        self.palette = self.createpalette() 
    17         self.surface = pygame.Surface((480,480)) 
    18         fill_window = Rect((0,0),(96,96)) 
    19         for y in range(5): 
    20             for x in range(5): 
     18 
     19        self.xpixels = 480 
     20        self.ypixels = 480 
     21 
     22        self.xblocks = 48 
     23        self.yblocks = 48 
     24 
     25        self.xblockpx = self.xpixels/self.xblocks 
     26        self.yblockpx = self.ypixels/self.yblocks 
     27 
     28        self.surface = pygame.Surface((self.xpixels,self.ypixels)) 
     29 
     30        fill_window = Rect((0,0),(self.xblockpx,self.yblockpx)) 
     31        for y in range(self.yblocks): 
     32            for x in range(self.xblocks): 
    2133                self.surface.fill(self.fill_color,fill_window) 
    22                 fill_window = fill_window.move(96,0) 
    23             fill_window = fill_window.move(-480,96) 
     34                fill_window = fill_window.move(self.xblockpx+1,0) 
     35            fill_window = fill_window.move(-self.xpixels,self.yblockpx+1) 
     36 
     37        self.emesh = EacMesh(self.xblocks,self.yblocks) 
    2438     
    2539    def set_block(self, pos, color): 
    26         fill_window = Rect((pos[0]*96,pos[1]*96),(96,96)) 
     40        fill_window = Rect(((pos[0]*(self.xblockpx))+1,(pos[1]*(self.yblockpx))+1),(self.xblockpx,self.yblockpx)) 
    2741        self.surface.fill(color,fill_window) 
    2842                 
    2943    def set_all(self,color): 
    30         fill_window = Rect((0,0),(480,480)) 
     44        fill_window = Rect((0,0),(self.xpixels,self.ypixels)) 
    3145        self.surface.fill(color,fill_window) 
    3246 
    3347    def update(self,pg): 
    3448        if self.absolute == True: 
    35 #             x,y = mgrid[0.0:5.0:1.0,0.0:5.0:1.0] 
    36 #             z = zeros((5,5)) 
    37 #             for row in range(5): 
    38 #                 for col in range(5): 
    39 #                     z[row][col] = float(pg.grid[row][col].voltage) 
    40 #  
    41 #             print z.shape 
    42 #             xnew,ynew = mgrid[0.0:5.0:1.0/400.0,0.0:5.0:1.0/400.0] 
    43 #             tck = interpolate.bisplrep(x,y,z,s=0) 
    44 #             znew = interpolate.bisplev(xnew[:,0],ynew[0,:],tck) 
    45 #             print znew.shape 
    46 #             row = 0 
    47 #            col = 0 
    48 #             for row in range(400): 
    49 #                for col in range(400): 
    50 #                      color_norm = znew[row][col]/5.0 
    51 #                     if color_norm > 1: 
    52 #                         color_norm = 1 
    53 #                     elif color_norm < 0: 
    54 #                         color_norm = 0 
    55 #  
    56 #                     color_norm *= 16777215 
    57 #                     red = (int(color_norm) & 0xFF0000) >> 16 
    58 #                     if red > 0xFF: 
    59 #                         print red 
    60 #                     green = (int(color_norm) & 0x00FF00) >> 8 
    61 #                     if green > 0xFF: 
    62 #                         print green 
    63 #                     blue = (int(color_norm) & 0x0000FF)  
    64 #                     if blue > 0xFF: 
    65 #                         print blue 
    66 #  
    67 #                     self.surface.set_at((row,col),(red,green,blue)) 
    68              
    69             max = 5.0 
    70             min = 0.0 
    71             for y in range(5): 
    72                 for x in range(5): 
    73                     voltage = float(pg.grid[y][x].voltage) 
    74                     if voltage > max: 
    75                         voltage = max 
    76                     elif voltage < min: 
    77                         voltage = min 
    78                     cdata = self.palette[int((voltage/max)*255)] 
    79                     self.set_block((x,y),cdata) 
     49            self.interpolate = True 
     50            if self.interpolate == True: 
     51                z = zeros((5,5)) 
     52                for row in range(5): 
     53                    for col in range(5): 
     54                        z[row][col] = float(pg.grid[row][col].voltage) 
     55                blockdata = self.emesh.update(z) 
     56                              
     57                for y in range(self.yblocks): 
     58                    for x in range(self.xblocks): 
     59                        self.set_block((x,y),blockdata[x][y]) 
     60                        # self.set_block((x,y),(50+2*x,0,0)) 
     61            else: 
     62                max = 5.0 
     63                min = 0.0 
     64                for y in range(5): 
     65                    for x in range(5): 
     66                        voltage = float(pg.grid[y][x].voltage) 
     67                        if voltage > max: 
     68                            voltage = max 
     69                        elif voltage < min: 
     70                            voltage = min 
     71                        cdata = self.palette[int((voltage/max)*255)] 
     72                        self.set_block((x,y),cdata) 
    8073        else: 
    8174            max = 0.0