| Ilya Zakharevich on Sat, 14 Mar 1998 08:19:28 +0100 |
[Date Prev] [Date Next] [Thread Prev] [Thread Next] [Date Index] [Thread Index]
| Re: Minor plotting improvements |
This increases vertical resolution of plot() 3.1 times, horizontal
10% and makes the plotting area into a square one (66 x 66), so that linear
functions are perfect on the display (at least those which intersect y=0).
The difference with the previous patch is that the vertical resolution of y=0
is improved as well, without this graphs with one of the boundaries being
y=0 looked silly.
Enjoy,
Ilya
Here are the samples:
was:
? plot(x=-1,2,sin(x))
1.000 |--------------------------------------------xxxxxxxxxxxx--|
| xxxx xxx
| xxxx |
| xx |
| xxx |
| xx |
| xx |
| xx |
| xx |
| x |
| xx |
-------------------xx---------------------------------------
| xx |
| xx |
| xx |
| xx |
| xx |
| xx |
| xx |
| xxx |
-0.841 xx---------------------------------------------------------|
-1.000 2.000
?
Now:
? plot(x=-1,2,sin(x))
1.000 |'''''''''''''''''''''''''''''''''''''''''''''''__xxx~~~~~~~xxx_'|
| _x~~ ~~
| _x~ |
| _x~ |
| _~ |
| x~ |
| x~ |
| x~ |
| x~ |
| x~ |
| _~ |
,,,,,,,,,,,,,,,,,,,,,,_~,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
| _~ |
| _x |
| _x |
| x |
| x~ |
| _x~ |
| _x |
| _~ |
| _x~ |
-0.841 _x~..............................................................|
-1.000 2.000
?
--- ../../src/graph/plotport.c~ Sat Feb 7 11:12:08 1998
+++ ../../src/graph/plotport.c Sat Mar 14 02:09:52 1998
@@ -36,20 +36,27 @@ PARI_plot pari_plot, pari_psplot;
/** **/
/********************************************************************/
-#define ISCR 60
-#define JSCR 21
+#define ISCR 66
+#define JSCR 22
#define BLANK ' '
-#define ZERO '-'
+#define ZERO1 ','
+#define ZERO2 '-'
+#define ZERO3 '`'
+#define PICTZERO(j) ((j) % 3 ? ((j) % 3 == 2 ? ZERO3 : ZERO2) : ZERO1)
#define YY '|'
-#define XX '-'
-#define FF 'x'
+#define XX_UPPER '\''
+#define XX_LOWER '.'
+#define FF1 '_'
+#define FF2 'x'
+#define FF3 '~'
+#define PICT(j) ((j) % 3 ? ((j) % 3 == 2 ? FF3 : FF2) : FF1)
void
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];
+ char scr[ISCR+1][JSCR+1], z;
sig=gcmp(b,a); if (!sig) return;
if (sig<0) { x=a; a=b; b=x; }
@@ -61,7 +68,8 @@ plot(entree *ep, GEN a, GEN b, char *ch)
for (j=1; j<=JSCR; j++) scr[1][j]=scr[ISCR][j]=YY;
for (i=2; i<ISCR; i++)
{
- scr[i][1]=scr[i][JSCR]=XX;
+ scr[i][1] = XX_LOWER;
+ scr[i][JSCR]=XX_UPPER;
for (j=2; j<JSCR; j++) scr[i][j]=BLANK;
}
av2=avma; limite=(av2+bot)>>1;
@@ -81,12 +89,14 @@ plot(entree *ep, GEN a, GEN b, char *ch)
}
avma=av2; diff=gsub(ybig,ysml);
if (gcmp0(diff)) { ybig=gaddsg(1,ybig); diff=gun; }
- dyj=gdivsg(JSCR-1,diff); jz=1-gtolong(gmul(ysml,dyj));
+ dyj=gdivsg((JSCR-1)*3+2,diff); jz=3-gtolong(gmul(ysml,dyj));
av2=avma;
+ z = PICTZERO(jz); jz = jz/3;
for (i=1; i<=ISCR; i++)
{
- scr[i][jz]=ZERO; j=1+gtolong(gmul(gsub(y[i],ysml),dyj));
- scr[i][j]=FF; avma=av2;
+ scr[i][jz]=z; j=3+gtolong(gmul(gsub(y[i],ysml),dyj));
+ scr[i][j/3] = PICT(j);
+ avma=av2;
}
p1=cgetr(4); gaffect(ybig,p1); pariputc('\n');
pariputsf(" %10.3f ",rtodbl(p1));
@@ -104,7 +114,7 @@ plot(entree *ep, GEN a, GEN b, char *ch)
pariputc('\n');
p1=cgetr(4); p2=cgetr(4); gaffect(a,p1); gaffect(b,p2);
pariputsf("%8s %10.3f %44s %10.3f\n"," ",rtodbl(p1)," ",rtodbl(p2));
- pariputc('\n'); pop_val(ep); avma=av;
+ pop_val(ep); avma=av;
}
/********************************************************************/