Warning: this is an htmlized version!
The original is here, and
the conversion rules are here.
/*
 * This file:
 *   http://anggtwu.net/MAXIMA/2025-lerps.mac.html
 *   http://anggtwu.net/MAXIMA/2025-lerps.mac
 *          (find-angg "MAXIMA/2025-lerps.mac")
 * Author: Eduardo Ochs <eduardoochs@gmail.com>
 *
 * A "Lerps object" is a series of points joined by lerps. See:
 *   https://en.wikipedia.org/wiki/Linear_interpolation
 *   http://anggtwu.net/eev-maxima.html#methods
 * A screenshot:
 *   http://anggtwu.net/IMAGES/2025-maxima-methods-lerps.png
 *
 * (defun o () (interactive) (find-angg "MAXIMA/2025-1-lerps.mac"))
 * (defun e () (interactive) (find-angg "MAXIMA/2025-lerps.mac"))
 * (find-angg "MAXIMA/2025-cases.mac")
 *
 * «.core»		(to "core")
 * «.core-tests»	(to "core-tests")
 * «.2D-tests»		(to "2D-tests")
*/

/* «core»  (to ".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(Lerps(var,ts,Ps));
Lerps__n     (lerps)   := length(lerps@ts);
Lerps__ti    (lerps,i) := lerps@ts[i];
Lerps__Pi    (lerps,i) := lerps@Ps[i];
Lerps__pairi (lerps,i) := [lerps@@ti(i), lerps@@Pi(i)];
Lerps__pairs (lerps)   := makelist(lerps@@pairi(i), i,1,lerps@@n());
Lerps__matrix(lerps)   := apply('matrix, lerps@@pairs());
Lerps__fi    (lerps,i) := lerp5(lerps@@Pi(i), lerps@@Pi(i+1),
                                lerps@@ti(i), lerps@@ti(i+1), lerps@var);
Lerps__condi_(lerps,i) := lerps@var < lerps@@ti(i+1);
Lerps__condi (lerps,i) := if i<lerps@@n()-1 then lerps@@condi_(i) else true;
Lerps__conds (lerps)   := makelist(lerps@@condi(i), i,1,lerps@@n()-1);
Lerps__fs    (lerps)   := makelist(lerps@@fi   (i), i,1,lerps@@n()-1);
Lerps__cases (lerps)   := Cases(lerps@@conds(), lerps@@fs());
Lerps__makeif(lerps)   := lerps@@cases()@@makeif();

/* «core-tests»  (to ".core-tests")
* (eepitch-maxima)
* (eepitch-kill)
* (eepitch-maxima)
load("2025-lerps.mac");
myl : Lerps(t, [ 2, 4, 5],
              [10,20,40]);
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)];
[f(3), f(4.5)];
[f(1), f(6)];

** «2D-tests»  (to ".2D-tests")
* (eepitch-maxima)
* (eepitch-kill)
* (eepitch-maxima)
** (find-myqdraw "myqdraw3.mac")
load_myqdraw();
load("2025-lerps.mac");
mylerp2d : Lerps(t, [   2,     4,     7,    11],
                    [[1,1], [2,1], [3,2], [3,3]]);
mycolors : Cases([t<2, t<4,    t<7,          t<11,  true],
                 [red, orange, forest_green, blue, violet])$

define(P(t),        mylerp2d@@makeif());
define(mycolors(t), mycolors@@makeif());
mypoint(t) := pts([P(t)], pc(mycolors(t)))$
myrow  (t) := [t,  P(t),     mycolors(t)]$
myqdraw(xyrange(),        makelist(mypoint(t), t, seq(1,12)));
mymatrix : apply('matrix, makelist(myrow(t),   t, seq(1,12)))$
linel : 100;
[mylerp2d@@matrix(), mycolors@@matrix(), mymatrix];

*/