23 static SincTableManager&
STM();
28 Table(
int lsinc,
int nsinc,
float emax,
float fmax,
31 bool isOK()
const {
return asinc_.get2DData(); }
33 void setValue(
int,
int,
float);
35 bool hasSameDesign(
float fmax,
int lmax)
const;
40 int getNumbers()
const;
55 friend class RotatorExecutor;
59 const Table* getTable(
float fmax,
int lmax);
65 int getTableIdx(
float fmax,
int lmax)
const;
68 static const Table* makeTable(
float fmax,
int lmax);
69 static float sinc(
float x);
130 virtual bool initTable(
float fmax,
int lmax);
131 inline bool isTableOK()
const;
133 inline od_int64 getTableBytes()
const;
134 inline float getMaximumError()
const;
135 inline float getMaximumFrequency()
const;
136 inline int getMaximumLength()
const;
144 bool init() {
return initTable( 0.3f, 8 ); }
165 template <
class RT,
class PT>
173 void setInput(
const RT*,
bool datahasnoudf=
false);
174 bool isOK()
const {
return data_ && isTableOK(); }
175 bool initTable(
float fmax,
int lmax);
177 RT getValue(PT)
const;
187 template <
class RT,
class PT>
193 bool isOK()
const {
return isTableOK(); }
194 bool initTable(
float fmax,
int lmax);
196 RT getValue(PT,PT)
const;
209 template <
class RT,
class PT>
215 bool isOK()
const {
return isTableOK(); }
216 bool initTable(
float fmax,
int lmax);
218 RT getValue(PT,PT,PT)
const;
261 bool hasudfs =
false;
262 for (
int idx=0; idx<sz; idx++ )
277 template <
class RT,
class PT>
288 template <
class RT,
class PT>
299 template <
class RT,
class PT>
310 template <
class RT,
class PT>
320 #define mKSinc(frac) ( mCast(int,frac*nsincm1_+0.5) ) 321 #define mValidPos(is,ns) ( (is > -1 && is < ns) ) 322 #define mCheckUdf(totidx) \ 324 if ( isudfarr_ && isudfarr_[totidx] ) \ 327 #define mAddVal(val,weight,totidx,outval) \ 330 outval += val * weight; \ 332 #define mAddValW(val,totidx,weight,outval,sumweights) \ 335 outval += val * weight; \ 336 sumweights += weight; \ 339 template <
class RT,
class PT>
348 const PT floorx = floor(x);
356 for (
int isinc=0,idx=idx0; isinc<
lsinc_; isinc++,idx++ )
361 for (
int isinc=0,idx=idx0; isinc<
lsinc_; isinc++,idx++ )
369 float sumweights = 0.f;
370 for (
int isinc=0,idx=idx0; isinc<
lsinc_; isinc++,idx++ )
385 template <
class RT,
class PT>
397 template <
class RT,
class PT>
409 template <
class RT,
class PT>
421 const PT floorx = floor(x);
422 const PT floory = floor(y);
430 double out = 0., outx;
433 for (
int ixsinc=0,idx=idx0; ixsinc<
lsinc_; ixsinc++,idx++ )
436 const float asincxval = asincx[ixsinc];
440 for (
int iysinc=0,idy=idy0; iysinc<
lsinc_; iysinc++,idy++ )
445 out += outx * asincxval;
450 for (
int ixsinc=0,idx=idx0; ixsinc<
lsinc_; ixsinc++,idx++ )
453 const float asincxval = asincx[ixsinc];
458 for (
int iysinc=0,idy=idy0; iysinc<
lsinc_; iysinc++,idy++ )
464 out += outx * asincxval;
469 double sumweights = 0., sumx;
470 for (
int ixsinc=0,idx=idx0; ixsinc<
lsinc_; ixsinc++,idx++ )
472 outx = 0.; sumx = 0.;
473 const float asincxval = asincx[ixsinc];
477 for (
int iysinc=0,idy=idy0; iysinc<
lsinc_; iysinc++,idy++ )
485 out += outx * asincxval;
496 template <
class RT,
class PT>
510 template <
class RT,
class PT>
524 #define mGetOffset(idx,idy,idz) ( idz + nz_*( idy + ny_*idx ) ) 525 template <
class RT,
class PT>
540 const PT floorx = floor(x);
541 const PT floory = floor(y);
542 const PT floorz = floor(z);
557 for (
int ixsinc=0,idx=idx0; ixsinc<
lsinc_; ixsinc++,idx++ )
560 const float asincxval = asincx[ixsinc];
564 for (
int iysinc=0,idy=idy0; iysinc<
lsinc_; iysinc++,idy++ )
567 const float asincyval = asincy[iysinc];
571 for (
int izsinc=0,idz=idz0; izsinc<
lsinc_; izsinc++,idz++ )
576 outx += outy * asincyval;
578 out += asincxval * outx;
583 for (
int ixsinc=0,idx=idx0; ixsinc<
lsinc_; ixsinc++,idx++ )
586 const float asincxval = asincx[ixsinc];
591 for (
int iysinc=0,idy=idy0; iysinc<
lsinc_; iysinc++,idy++ )
594 const float asincyval = asincy[iysinc];
599 for (
int izsinc=0,idz=idz0; izsinc<
lsinc_; izsinc++,idz++ )
605 outx += outy * asincyval;
607 out += asincxval * outx;
612 double sumweights = 0., sumx, sumy;
613 for (
int ixsinc=0,idx=idx0; ixsinc<
lsinc_; ixsinc++,idx++ )
615 outx = 0.; sumx = 0.;
616 const float asincxval = asincx[ixsinc];
620 for (
int iysinc=0,idy=idy0; iysinc<
lsinc_; iysinc++,idy++ )
622 outy = 0.; sumy = 0.;
623 const float asincyval = asincy[iysinc];
627 for (
int izsinc=0,idz=idz0; izsinc<
lsinc_; izsinc++,idz++ )
633 outx += outy * asincyval;
636 out += asincxval * outx;
#define mExpClass(module)
Definition: commondefs.h:157
#define mIsUdf(val)
Use mIsUdf to check for undefinedness of simple types.
Definition: undefval.h:285
bool isOK() const
Definition: sincinterpolator.h:31
Kaiser Window Function.
Definition: windowfunction.h:105
Extrapolation
Definition: sincinterpolator.h:138
int nx_
Definition: sincinterpolator.h:182
int nx_
Definition: sincinterpolator.h:223
od_int64 getTableBytes() const
Definition: sincinterpolator.h:246
static const float snapdist
Definition: sincinterpolator.h:155
int getLength() const
Definition: windowfunction.h:122
int nsincm1_
Definition: sincinterpolator.h:151
bool initTable(float fmax, int lmax)
Definition: sincinterpolator.h:311
#define mIsZero(x, eps)
Definition: commondefs.h:55
bool isTableOK() const
Definition: sincinterpolator.h:234
bool initTable(float fmax, int lmax)
Definition: sincinterpolator.h:398
#define mCast(tp, v)
Definition: commondefs.h:120
int nx_
Definition: sincinterpolator.h:201
RT getValue(PT, PT) const
Definition: sincinterpolator.h:410
Array2DImpl< float > asinc_
Definition: sincinterpolator.h:46
#define od_int64
Definition: plftypes.h:34
int ny_
Definition: sincinterpolator.h:224
ObjectSet< const Table > tables_
Definition: sincinterpolator.h:62
int nym_
Definition: sincinterpolator.h:204
SincInterpolator3D(const RT *data, int nx, int ny, int nz)
Definition: sincinterpolator.h:497
Mathematical function.
Definition: mathfunc.h:59
int getMaximumLength() const
Definition: sincinterpolator.h:243
bool initUndefTable(const RT *, od_int64 sz)
Definition: sincinterpolator.h:251
Definition: sincinterpolator.h:166
SincTableManager()
Definition: sincinterpolator.h:21
int ishift_
Definition: sincinterpolator.h:152
void deleteAndZeroArrPtr(T *&ptr, bool isowner=true)
Definition: ptrman.h:32
int nxm_
Definition: sincinterpolator.h:226
int lmax_
Definition: sincinterpolator.h:52
int getMaximumLength() const
Definition: sincinterpolator.h:38
Definition: sincinterpolator.h:210
Set of pointers to objects.
Definition: commontypes.h:28
float getMaximumFrequency() const
Definition: sincinterpolator.h:240
int nzm_
Definition: sincinterpolator.h:228
#define mNINT32(x)
Definition: commondefs.h:48
float getMaximumError() const
Definition: sincinterpolator.h:237
SincInterpolator2D(const RT *, int nx, int ny)
Definition: sincinterpolator.h:386
A manager used for constructing the table necessary for Sinc interpolations. The manager creates one ...
Definition: sincinterpolator.h:18
Definition: geom2dascio.h:18
#define mAddVal(val, weight, totidx, outval)
Definition: sincinterpolator.h:327
float getMaximumError() const
Definition: sincinterpolator.h:36
#define mKSinc(frac)
Definition: sincinterpolator.h:320
virtual bool initTable(float fmax, int lmax)
bool isOK() const
Definition: sincinterpolator.h:193
bool * isudfarr_
Definition: sincinterpolator.h:149
A Math Function as in F(x,y,z).
Definition: mathfunc.h:120
int nz_
Definition: sincinterpolator.h:225
#define mTryAlloc(var, stmt)
Catches bad_alloc and sets ptr to null as normal.
Definition: commondefs.h:244
void setInput(const RT *, bool datahasnoudf=false)
Definition: sincinterpolator.h:289
#define mValidPos(is, ns)
Definition: sincinterpolator.h:321
const float ** asinc_
Definition: sincinterpolator.h:161
bool setSize(int)
Definition: sincinterpolator.h:300
int nxm_
Definition: sincinterpolator.h:203
#define mDefEps
Definition: commondefs.h:60
bool isOK() const
Definition: sincinterpolator.h:215
Threads::Mutex lock_
Definition: sincinterpolator.h:63
#define mDefEpsF
Definition: commondefs.h:58
A sinc interpolator for bandlimited uniformly-sampled functions y(x). Interpolators can be designed f...
Definition: sincinterpolator.h:123
A Math Function as in F(x,y).
Definition: mathfunc.h:103
int nym_
Definition: sincinterpolator.h:227
od_int64 getTableBytes() const
#define mGetOffset(idx, idy, idz)
Definition: sincinterpolator.h:524
bool extrapcst_
Definition: sincinterpolator.h:153
bool initTable(float fmax, int lmax)
Definition: sincinterpolator.h:511
bool isOK() const
Definition: sincinterpolator.h:174
int lsinc_
Definition: sincinterpolator.h:150
int nxm_
Definition: sincinterpolator.h:183
bool init()
Definition: sincinterpolator.h:144
T getLimited(T v, T min, T max)
Definition: commondefs.h:43
Is a lock that allows a thread to have exlusive rights to something.
Definition: thread.h:43
SincInterpolator1D(const RT *=0, int sz=-1)
Definition: sincinterpolator.h:278
const RT * data_
Definition: sincinterpolator.h:181
RT getValue(PT, PT, PT) const
Definition: sincinterpolator.h:526
RT getValue(PT) const
Definition: sincinterpolator.h:340
Definition: sincinterpolator.h:25
int ny_
Definition: sincinterpolator.h:202
Definition: sincinterpolator.h:188
#define mClass(module)
Definition: commondefs.h:161
SceneTransformManager & STM()
const RT * data_
Definition: sincinterpolator.h:222
float fmax_
Definition: sincinterpolator.h:51
float emax_
Definition: sincinterpolator.h:50
const SincTableManager::Table * table_
Definition: sincinterpolator.h:160
float getMaximumFrequency() const
Definition: sincinterpolator.h:37
const RT * data_
Definition: sincinterpolator.h:200
#define mAddValW(val, totidx, weight, outval, sumweights)
Definition: sincinterpolator.h:332