Ilya Zakharevich on Thu, 8 Oct 1998 20:30:02 -0400 (EDT) |
[Date Prev] [Date Next] [Thread Prev] [Thread Next] [Date Index] [Thread Index]
Plotting patch |
This patch for plot() is two-fold. First, it changes the char-to-plot-high from '*' (which is in the middle for many fonts) to '"' (which I hope is up with most fonts). Second, it adds intermediate points if the points for two consequent values of i are far-separeted. Now the result of plot(x=2,4,sin(x^3)) looks like this: 9.997e-01"''''''''''''"'''''''''"'''''''"''''''"'''''"''''''''''''''"'''| |_ x : : : : : " |: " : : x : _ :: : "" "_ : : | : : : " : : : : : : : :: :: : : | x : : : : _ : : _ : : :: :: : : | : : x : : : : " : : x :: :: : : : | : _ : : : : : : : _ : :: :: : : : | : : : : : : : : : : : :: :: : : : | x : : : _ : : : : : : : : : : : : :| | : : : _ : : : : : : : : : : : x x :| ,,,:,,,,,,:,,,,,:,,,,:,,,:,,,:,,,:,,:,,,:,,:,:,,:,,:,:,,:,:,:,:, | : : _ : : : x : : : : : : : : : : :| | : " : : : : : : : : : : : : : : : :| | " : : : : x : : : : : x _ : : : : :| | : : : : : : : _ : : : : : x : : : x| | : : : : : : : : " : : : : : :: ::| | : : : _ _ : : : : : : : : : ": ::| | x x _ : : : : : : x ": :: :: ::| | : : : : : : :: :: :: : :: : | | : : :: :: x: : : : : : | | x _ :: :" : : : : : : | -9.998e-01|......_..........x".......x.......x....._....._...._...."...x.| 2.000e+00 4.000e+00 I hope you consider this as an improvement wrt the random mesh the previous code would generate on the right. 9.997e-01*''''''''''''*'''''''''*'''''''*''''''*'''''*''''''''''''''*'''| |_ x * | * x _ ** *_ | | * | | x _ _ | | x * x | | _ _ | | | | x _ | | _ x x | ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, | _ x | | * | | * x x _ | | _ x x| | * | | _ _ * | | x x _ x * | | | | x | | x _ * | -9.998e-01|......_..........x*.......x.......x....._....._...._....*...x.| 2.000e+00 4.000e+00 Enjoy, Ilya --- ./pari-2.0.11.beta/src/graph/plotport.c~ Thu Oct 8 02:10:20 1998 +++ ./pari-2.0.11.beta/src/graph/plotport.c Thu Oct 8 20:00:58 1998 @@ -47,7 +47,7 @@ PARI_plot pari_plot, pari_psplot; #define XX_LOWER '.' #define FF1 '_' #define FF2 'x' -#define FF3 '*' +#define FF3 '"' #define PICT(j) ((j) % 3 ? ((j) % 3 == 2 ? FF3 : FF2) : FF1) void --- ./pari-2.0.11.beta/src/graph/plotport.c~ Thu Oct 8 02:10:20 1998 +++ ./pari-2.0.11.beta/src/graph/plotport.c Thu Oct 8 20:18:49 1998 @@ -47,7 +47,7 @@ PARI_plot pari_plot, pari_psplot; #define XX_LOWER '.' #define FF1 '_' #define FF2 'x' -#define FF3 '*' +#define FF3 '"' #define PICT(j) ((j) % 3 ? ((j) % 3 == 2 ? FF3 : FF2) : FF1) void @@ -55,7 +55,7 @@ plot(entree *ep, GEN a, GEN b, char *ch) { long av = avma, av2,limite,jz,j,i,sig; GEN p1,p2,ysml,ybig,x,diff,dyj,dx,y[ISCR+1]; - char scr[ISCR+1][JSCR+1], z; + char scr[ISCR+1][JSCR+1], z, jprev, jnew; sig=gcmp(b,a); if (!sig) return; if (sig<0) { x=a; a=b; b=x; } @@ -94,7 +94,36 @@ plot(entree *ep, GEN a, GEN b, char *ch) for (i=1; i<=ISCR; i++) { scr[i][jz]=z; j=3+gtolong(gmul(gsub(y[i],ysml),dyj)); - scr[i][j/3] = PICT(j); avma=av2; + jnew = j/3; + if (i > 1) { + int i_up, i_down, mid = (jprev + jnew)/2, up, down; + int domid = 0, jmid; + + /* If the gap is 1, leave it as it is. */ + if (jprev < jnew - 2) { + i_up = i; + i_down = i - 1; + up = jnew - 1; + down = jprev + 1; + domid = 1; + } else if (jnew < jprev - 2) { + i_up = i - 1; + i_down = i; + down = jnew + 1; + up = jprev - 1; + domid = 1; + } + if (domid) { + while (down <= mid) { + scr[i_down][down++] = ':'; + } + while (up > mid) { + scr[i_up][up--] = ':'; + } + } + } + scr[i][jnew] = PICT(j); avma=av2; + jprev = jnew; } p1=cgetr(3); gaffect(ybig,p1); pariputc('\n'); pariputsf(" %8.3e",rtodbl(p1));