aboutsummaryrefslogtreecommitdiff
path: root/src/un_splines.c
blob: 7b27ee037cf73c2f5827cdfd757bd4c90759138d (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
real un_m_bezierr(real a, real q0, real q1, real b, real t) {
    real i0, i1, i2, p1, p2;

    i0 = un_m_lerpr(a,  q0, t);
    i1 = un_m_lerpr(q0, q1, t);
    i2 = un_m_lerpr(q1, b,  t);

    p1 = un_m_lerpr(i0, i1, t);
    p2 = un_m_lerpr(i1, i2, t);

    return un_m_lerpr(p1, p2, t);
}

f32 un_m_bezierf(f32 a, f32 q0, f32 q1, f32 b, f32 t) {
    f32 i0, i1, i2, p1, p2;

    i0 = un_m_lerpf(a,  q0, t);
    i1 = un_m_lerpf(q0, q1, t);
    i2 = un_m_lerpf(q1, b,  t);

    p1 = un_m_lerpf(i0, i1, t);
    p2 = un_m_lerpf(i1, i2, t);

    return un_m_lerpf(p1, p2, t);
}

f64 un_m_bezierd(f64 a, f64 q0, f64 q1, f64 b, f64 t) {
    f64 i0, i1, i2, p1, p2;

    i0 = un_m_lerpd(a,  q0, t);
    i1 = un_m_lerpd(q0, q1, t);
    i2 = un_m_lerpd(q1, b,  t);

    p1 = un_m_lerpd(i0, i1, t);
    p2 = un_m_lerpd(i1, i2, t);

    return un_m_lerpd(p1, p2, t);
}

// add v2-4 variants