Warning: this is an htmlized version!
The original is here, and
the conversion rules are here.
/*
 * This file:
 *   http://anggtwu.net/MAXIMA/2025-1-lerps.mac.html
 *   http://anggtwu.net/MAXIMA/2025-1-lerps.mac
 *          (find-angg "MAXIMA/2025-1-lerps.mac")
 * Author: Eduardo Ochs <eduardoochs@gmail.com>
 *
 * OBSOLETE! Superseded by:
 *   (find-angg "MAXIMA/2025-lerps.mac")
 *
 * See: (find-es "maxima" "mycase")
 *      (find-angg "MAXIMA/2025-cases.mac")
 *      (find-angg "MAXIMA/2025-cases.mac" "core")
*/

load("~/MAXIMA/2025-cases.mac");

lerp3(P0,P1,      t) := P0 +  t            *(P1-P0);
lerp5(P0,P1,t0,t1,t) := P0 + (t-t0)/(t1-t0)*(P1-P0);

defstruct(Lerp(var,ts,Ps));
Lerp__n     (lerp)   := length(lerp@ts);
Lerp__ti    (lerp,i) := lerp@ts[i];
Lerp__Pi    (lerp,i) := lerp@Ps[i];
Lerp__pairi (lerp,i) := [lerp@@ti(i), lerp@@Pi(i)];
Lerp__pairs (lerp)   := makelist(lerp@@pairi(i), i,1,lerp@@n());
Lerp__matrix(lerp)   := apply('matrix, lerp@@pairs());
Lerp__fi    (lerp,i) := lerp5(lerp@@Pi(i), lerp@@Pi(i+1),
                              lerp@@ti(i), lerp@@ti(i+1), lerp@var);
Lerp__condi_(lerp,i) := lerp@var < lerp@@ti(i+1);
Lerp__condi (lerp,i) := if i<lerp@@n()-1 then lerp@@condi_(i) else true;
Lerp__conds (lerp)   := makelist(lerp@@condi(i), i,1,lerp@@n()-1);
Lerp__fs    (lerp)   := makelist(lerp@@fi   (i), i,1,lerp@@n()-1);
Lerp__cases (lerp)   := Cases(lerp@@conds(), lerp@@fs());
Lerp__makeif(lerp)   := lerp@@cases()@@makeif();

/*
* (eepitch-maxima)
* (eepitch-kill)
* (eepitch-maxima)
load("2025-1-lerps.mac");
myl : Lerp(t, [ 2, 4, 5],
              [10,20,30]);
myl@@matrix();
myl@@fi(1);
myl@@conds();
myl@@fs();
myl@@cases();
myl@@cases()@@matrix();
myl@@cases()@@makeif();
myl         @@makeif();

define(f(t), myl@@makeif());
f(2);
f(4);
f(5);

** (c3m251sgp 5 "traj-em-3-partes")
** (c3m251sga   "traj-em-3-partes")
myl2 : Lerp(t, [   0,     1,     2,     4],
               [[1,1], [3,1], [4,2], [4,3]]);
define(P(t), myl2@@makeif());
ts : seqby(-1,5,1/2);
mypts  : makelist(   P(t),  t, ts);
mytpts : makelist([t,P(t)], t, ts);
apply('matrix, mytpts);
** (find-myqdraw "myqdraw3.mac")
load_myqdraw();
myqdraw(xyrange(), pts(mypts));

*/




lerp (A,B,t) := A + t*(B-A);
lerps(ts,Ps) := block([n,t,tests,results,ifargs],
    n        : length(Ps),
    tests    : makelist(t<ts[k], k,2,n),
    results  : makelist(lerp(Ps[k-1],Ps[k],(t-ts[k-1])/(ts[k]-ts[k-1])), k,2,n),
    tests[length(tests)] : true,
    ifargs   : apply('append, args(transpose(apply('matrix, [tests,results])))),
    funmake("if", ifargs)
  )$



/*
** (c3m251sgp 5 "traj-em-3-partes")
** (c3m251sga   "traj-em-3-partes")
* (eepitch-maxima)
* (eepitch-kill)
* (eepitch-maxima)
load("2025-1-lerps.mac");
lerps([t1,t2,t3],    [Q1,Q2,Q3]);
lerps([t1,t2,t3,t4], [Q1,Q2,Q3,Q4]);

lerptt(2,3,  10,20,11);

ts : [0,1,2,4];
Qs : [[1,1], [3,1], [4,2], [4,3]];
             lerps(ts,Qs);
define(P(t), lerps(ts,Qs));
P(0);


** (find-myqdraw "myqdraw3.mac")
load_myqdraw();

Pts : makelist(P(t), t, seqby(0,4,1));
Pts : makelist(P(t), t, seqby(0,4,1/2));
myqdraw(xyrange(), pts(Pts));

*/