mirror of
https://github.com/aicodix/dsp.git
synced 2026-04-27 14:30:36 +00:00
added input and output type
This commit is contained in:
parent
7efb7d2f0f
commit
60830afbe6
1 changed files with 19 additions and 19 deletions
38
spline.hh
38
spline.hh
|
|
@ -52,38 +52,38 @@ public:
|
|||
}
|
||||
};
|
||||
|
||||
template <typename TYPE>
|
||||
template <typename OTYPE, typename ITYPE>
|
||||
struct CubicHermiteSpline
|
||||
{
|
||||
static constexpr TYPE h00(TYPE t)
|
||||
static constexpr ITYPE h00(ITYPE t)
|
||||
{
|
||||
return (TYPE(1) + TYPE(2) * t) * (TYPE(1) - t) * (TYPE(1) - t);
|
||||
return (ITYPE(1) + ITYPE(2) * t) * (ITYPE(1) - t) * (ITYPE(1) - t);
|
||||
}
|
||||
static constexpr TYPE h10(TYPE t)
|
||||
static constexpr ITYPE h10(ITYPE t)
|
||||
{
|
||||
return t * (TYPE(1) - t) * (TYPE(1) - t);
|
||||
return t * (ITYPE(1) - t) * (ITYPE(1) - t);
|
||||
}
|
||||
static constexpr TYPE h01(TYPE t)
|
||||
static constexpr ITYPE h01(ITYPE t)
|
||||
{
|
||||
return t * t * (TYPE(3) - TYPE(2) * t);
|
||||
return t * t * (ITYPE(3) - ITYPE(2) * t);
|
||||
}
|
||||
static constexpr TYPE h11(TYPE t)
|
||||
static constexpr ITYPE h11(ITYPE t)
|
||||
{
|
||||
return t * t * (t - TYPE(1));
|
||||
return t * t * (t - ITYPE(1));
|
||||
}
|
||||
static constexpr TYPE left(const TYPE *x, const TYPE *y)
|
||||
static constexpr OTYPE left(const ITYPE *x, const OTYPE *y)
|
||||
{
|
||||
return (y[0] - y[-1]) / (x[0] - x[-1]);
|
||||
}
|
||||
static constexpr TYPE right(const TYPE *x, const TYPE *y)
|
||||
static constexpr OTYPE right(const ITYPE *x, const OTYPE *y)
|
||||
{
|
||||
return (y[1] - y[0]) / (x[1] - x[0]);
|
||||
}
|
||||
static constexpr TYPE central(const TYPE *x, const TYPE *y)
|
||||
static constexpr OTYPE central(const ITYPE *x, const OTYPE *y)
|
||||
{
|
||||
return TYPE(0.5) * (left(x, y) + right(x, y));
|
||||
return ITYPE(0.5) * (left(x, y) + right(x, y));
|
||||
}
|
||||
static constexpr TYPE eval(const TYPE *x, const TYPE *y, TYPE t, int k, int n)
|
||||
static constexpr OTYPE eval(const ITYPE *x, const OTYPE *y, ITYPE t, int k, int n)
|
||||
{
|
||||
return k < 1 ?
|
||||
h00(t) * y[0] + h10(t) * (x[1]-x[0]) * right(x, y) + h01(t) * y[1] + h11(t) * (x[1]-x[0]) * central(x+1, y+1)
|
||||
|
|
@ -92,19 +92,19 @@ struct CubicHermiteSpline
|
|||
:
|
||||
h00(t) * y[n-2] + h10(t) * (x[n-1]-x[n-2]) * central(x+n-2, y+n-2) + h01(t) * y[n-1] + h11(t) * (x[n-1]-x[n-2]) * left(x+n-1, y+n-1);
|
||||
}
|
||||
static constexpr TYPE left(const TYPE *y)
|
||||
static constexpr OTYPE left(const OTYPE *y)
|
||||
{
|
||||
return y[0] - y[-1];
|
||||
}
|
||||
static constexpr TYPE right(const TYPE *y)
|
||||
static constexpr OTYPE right(const OTYPE *y)
|
||||
{
|
||||
return y[1] - y[0];
|
||||
}
|
||||
static constexpr TYPE central(const TYPE *y)
|
||||
static constexpr OTYPE central(const OTYPE *y)
|
||||
{
|
||||
return TYPE(0.5) * (y[1] - y[-1]);
|
||||
return ITYPE(0.5) * (y[1] - y[-1]);
|
||||
}
|
||||
static constexpr TYPE eval(const TYPE *y, TYPE t, int k, int n)
|
||||
static constexpr OTYPE eval(const OTYPE *y, ITYPE t, int k, int n)
|
||||
{
|
||||
return k < 1 ?
|
||||
h00(t) * y[0] + h10(t) * right(y) + h01(t) * y[1] + h11(t) * central(y+1)
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue