0
|
1 #include "dmlib.h"
|
|
2
|
|
3 void dmLerpInit(DMLerpContext *ctx, DMFloat start, DMFloat end, DMFloat nsteps)
|
|
4 {
|
|
5 ctx->start = start;
|
|
6 ctx->end = end;
|
|
7 ctx->nsteps = nsteps;
|
|
8 }
|
|
9
|
|
10
|
|
11 DMFloat dmLerpSCurve(DMLerpContext *ctx, const DMFloat step)
|
|
12 {
|
|
13 const DMFloat n = step / ctx->nsteps;
|
|
14 const DMFloat v = DMM_S_CURVE(n);
|
|
15 return DMM_LERP(v, ctx->start, ctx->end);
|
|
16 }
|
|
17
|
|
18
|
|
19 DMFloat dmLerp1(DMLerpContext *ctx, const DMFloat step)
|
|
20 {
|
|
21 const DMFloat v = step / ctx->nsteps;
|
|
22 return DMM_LERP(v, ctx->start, ctx->end);
|
|
23 }
|
|
24
|
|
25
|
|
26 DMFloat dmCatmull_Rom(const DMFloat t, const DMFloat p0, const DMFloat p1, const DMFloat p2, const DMFloat p3)
|
|
27 {
|
|
28 const DMFloat q = t * t;
|
|
29 return (
|
|
30 (2 * p1) +
|
|
31 (-p0 + p2) * t +
|
|
32 (2 * p0 - 5 * p1 + 4 * p2 - p3) * q +
|
|
33 ( -p0 + 3 * p1 - 3 * p2 + p3) * q * t
|
|
34 ) * 0.5f;
|
|
35 }
|