|
|
researchv10 Norman
/*
...dump vector in two-digit base-64 compressed format...
*/
#include <stdio.h>
#include "../view2d.h"
#define INF 1e25
pack(n,f)
int n;
float f[];
{
float *t;
float fmin = INF, fmax = -INF;
float floor = -INF;
for(t=f+n; t!=f; t--){
if( *t<fmin) fmin= *t;
if( *t>fmax) fmax= *t;
}
printf("%d %e %e\n",n,fmin,fmax);
v2pack(n,f,fmin,fmax,floor);
}
/* write compressed values */
v2pack(n,data,fmin,fmax,floor)
int n;
float *data;
float fmin, fmax; /* data range before compression */
float floor; /* value to flag out of bounds */
{
int code, hi, lo, i;
float frange, slope, t;
frange = fmax - fmin;
if(frange==0.) frange=1.;
slope = 4095 / frange;
for(i=1; i<=n; i++, data++){
t = *data;
if( t <= floor ){
putchar('~');
putchar('~');
}else{
code = slope*(t-fmin);
if(code>4095){ code=4095; }else if(code<0){ code = 0; }
lo = code%64;
hi = code/64;
putchar(hi+33);
putchar(lo+33);
}
if(i%38==0) putchar('\n');
}
if(n%38!=0) putchar('\n');
}
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.