Fix time axis scaling (fixes #35)

Signed-off-by: Cees Bassa <cbassa@gmail.com>
master
Cees Bassa 2023-01-16 18:02:51 +01:00
parent 6018741c79
commit 68ddde792e
1 changed files with 20 additions and 13 deletions

View File

@ -823,6 +823,8 @@ void dec2sex(double x,char *s,int f,int len)
if (len==5) sprintf(s,"%c%02i%c%02i%c%05.2f%c",sign,(int) deg,form[f][0],(int) min,form[f][1],sec,form[f][2]); if (len==5) sprintf(s,"%c%02i%c%02i%c%05.2f%c",sign,(int) deg,form[f][0],(int) min,form[f][1],sec,form[f][2]);
if (len==4) sprintf(s,"%c%02i%c%02i%c%04.1f%c",sign,(int) deg,form[f][0],(int) min,form[f][1],sec,form[f][2]); if (len==4) sprintf(s,"%c%02i%c%02i%c%04.1f%c",sign,(int) deg,form[f][0],(int) min,form[f][1],sec,form[f][2]);
if (len==2) sprintf(s,"%c%02i%c%02i%c%02i%c",sign,(int) deg,form[f][0],(int) min,form[f][1],(int) floor(sec),form[f][2]); if (len==2) sprintf(s,"%c%02i%c%02i%c%02i%c",sign,(int) deg,form[f][0],(int) min,form[f][1],(int) floor(sec),form[f][2]);
if (len==1) sprintf(s,"%02i%c%02i%c%02i",(int) deg,form[f][0],(int) min,form[f][1],(int) floor(sec));
if (len==0) sprintf(s,"%02i%c%02i",(int) deg,form[f][0],(int) min,form[f][1]);
return; return;
} }
@ -836,14 +838,14 @@ void time_axis(double *mjd,int n,float xmin,float xmax,float ymin,float ymax)
char stime[16]; char stime[16];
// Find extrema // Find extrema
for (i=0;i<n;i++) { imin=(int) xmin;
if (i==0) { if (imin<0)
mjdmin=mjd[i]; imin=0;
mjdmax=mjd[i]; imax=(int) xmax;
} else { if (imax>=n)
if (mjd[i]>mjdmax) mjdmax=mjd[i]; imax=n-1;
} mjdmin=mjd[imin];
} mjdmax=mjd[imax];
dt=(float) 86400*(mjdmax-mjdmin); dt=(float) 86400*(mjdmax-mjdmin);
// Choose tickmarks // Choose tickmarks
@ -862,11 +864,14 @@ void time_axis(double *mjd,int n,float xmin,float xmax,float ymin,float ymax)
} else if (dt>900) { } else if (dt>900) {
lsec=300; lsec=300;
ssec=60; ssec=60;
} else if (dt>300) {
lsec=120;
ssec=60;
} else { } else {
lsec=60; lsec=20;
ssec=10; ssec=5;
} }
// Extrema // Extrema
tmin=86400.0*(mjdmin-floor(mjdmin)); tmin=86400.0*(mjdmin-floor(mjdmin));
tmax=tmin+dt; tmax=tmin+dt;
@ -881,8 +886,10 @@ void time_axis(double *mjd,int n,float xmin,float xmax,float ymin,float ymax)
if (mjdt>=mjd[i] && mjdt<mjd[i+1]) if (mjdt>=mjd[i] && mjdt<mjd[i+1])
break; break;
sec=(int) floor(fmod(t,86400.0)); sec=(int) floor(fmod(t,86400.0));
dec2sex(((float) sec+0.1)/3600.0,stime,0,2); if (dt < 300)
stime[6]='\0'; dec2sex(((float) sec+0.1)/3600.0,stime,0,1);
else
dec2sex(((float) sec+0.1)/3600.0,stime,0,0);
cpgtick(xmin,ymin,xmax,ymin,((float) i-xmin)/(xmax-xmin),0.5,0.5,0.3,0.0,stime); cpgtick(xmin,ymin,xmax,ymin,((float) i-xmin)/(xmax-xmin),0.5,0.5,0.3,0.0,stime);
} }
} }