/[gzz]/manuscripts/Paper/zipfarea.mp
ViewVC logotype

Diff of /manuscripts/Paper/zipfarea.mp

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 1.2 by tjl, Mon Mar 24 10:20:35 2003 UTC revision 1.3 by tjl, Mon Mar 24 16:24:27 2003 UTC
# Line 1  Line 1 
1    
2    prologues := 2;
3    
4  beginfig(1);  beginfig(1);
5    
6    
# Line 5  mrad = 100; Line 8  mrad = 100;
8    
9  path ucircle;  path ucircle;
10  ucircle := fullcircle shifted (.5,.5);  ucircle := fullcircle shifted (.5,.5);
11    show bbox(ucircle);
12    
13  h = 250;  h = 250;
14    
15    numeric coords[]x;
16    numeric coords[]y;
17    numeric coords[]h;
18    
19  vardef getcoord(expr s, e) =  vardef getcoord(expr s, e) =
20      save tp;      save tp;
21      save cp;      save cp;
# Line 20  vardef getcoord(expr s, e) = Line 28  vardef getcoord(expr s, e) =
28      xpart(urcorner(tp))      xpart(urcorner(tp))
29  enddef;  enddef;
30    
31    ncircles = 0;
32    
33    nsteps = 5;
34    
35    vardef drawcircle(expr rad, cmi, cmc) =
36        fill unitsquare scaled rad shifted (cmi,cmc) withcolor (uniformdeviate(1), uniformdeviate(1), uniformdeviate(1));
37        draw unitsquare scaled rad shifted (cmi,cmc) withpen pencircle scaled 1pt;
38    enddef;
39    
40  vardef addcircle(expr rad) =  vardef addcircle(expr rad) =
41      save cmi, cmc;      save cmi, cmc;
42      save cur;      save cur;
43      cmi := 1000;      save rmost;
44      for i = 0 upto h / rad:      save npie;
45          cur := getcoord(i*rad, (i+1)*rad);      numeric cmi;
46  %       show i,cur;      numeric rmost[];
47          if cur < cmi:      numeric npie;
48              cmi := cur;      npie := h / (rad/nsteps) - nsteps + 1;
49              cmc := i * rad;      for j = 0 upto npie:
50          fi          rmost[j] := 0;
51      endfor;      endfor;
52      draw ucircle scaled rad shifted (cmi,cmc);      for i = 1 upto ncircles:
53            for j = floor(coords[i].y / (rad/nsteps) - nsteps + 1) upto floor((coords[i].y+coords[i].h) / (rad/nsteps)):
54    %           show "LOOP:",i, coords[i].x,rmost[j];
55                if (j >= 0) and (j <= npie):
56                    if (rmost[j] < coords[i].x):
57        %           show "SET";
58                        rmost[j] := coords[i].x;
59                    fi;
60                fi
61            endfor
62        endfor;
63        cmi := 2000;
64        for j = 0 upto npie:
65    %       show cmi;
66    %       show rmost[j];
67            if (not known cmi) or (cmi > rmost[j]):
68                cmi := rmost[j];
69                cmc := j * (rad/nsteps);
70            fi;
71        endfor;
72    
73        drawcircle(rad, cmi, cmc);
74    
75        ncircles := ncircles +1;
76        coords[ncircles].x := cmi + rad;
77        coords[ncircles].y := cmc;
78        coords[ncircles].h := rad;
79    %    show "Placed",cmi,cmc,rad;
80    enddef;
81    
82    curx = 0;
83    cury = 0;
84    maxrad = 0;
85    
86    vardef addvarcircle(expr rad) =
87        if cury + rad > h:
88            curx := curx + maxrad;
89            cury := 0;
90            maxrad := 0;
91        fi;
92        drawcircle(rad, curx, cury);
93        if rad > maxrad:
94            maxrad := rad;
95        fi;
96        cury := cury + rad;
97  enddef;  enddef;
98    
99  for i = 1 upto 100:  for i = 1 upto 2000:
100  %    draw fullcircle scaled (mrad/((i**1.01)**.5)) shifted (.02*mrad*i,100);  %    draw fullcircle scaled (mrad/((i**1.01)**.5)) shifted (.02*mrad*i,100);
101      addcircle(mrad / ((i**1.01)**.5));      addvarcircle(mrad / ((i**1.05)**.5));
102  endfor;  endfor;
103    
104  picture p;  picture p;

Legend:
Removed from v.1.2  
changed lines
  Added in v.1.3

savannah-hackers-public@gnu.org
ViewVC Help
Powered by ViewVC 1.1.26