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