|
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];
*/