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