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