Warning: this is an htmlized version!
The original is here, and
the conversion rules are here.
/*
 * This file:
 *   http://anggtwu.net/MAXIMA/bezier1.mac.html
 *   http://anggtwu.net/MAXIMA/bezier1.mac
 *          (find-angg "MAXIMA/bezier1.mac")
 * Author: Eduardo Ochs <eduardoochs@gmail.com>
 *
 * (defun e () (interactive) (find-angg "MAXIMA/bezier1.mac"))
 * (find-es "maxima" "qdraw-bezier1")
 * (find-angg "MAXIMA/myqdraw1.mac" "myapply")
*/

/*
bezier4(P0,P1,P2,P3) := block(
  local(towt, Q0,Q1,Q2, R0,R1, S0),
  towt(A, B) := A + t*(B-A),
  [Q0, Q1, Q2] : [towt(P0,P1), towt(P1,P2), towt(P2,P3)],
  [R0, R1]     : [towt(Q0,Q1), towt(Q1,Q2)],
  [S0]         : [towt(R0,R1)],
  define(S0(t), ev(S0)),
  ev(S0)
  )$
*/

bezier4_(P0,P1,P2,P3) := block(
  local(towt, Q0,Q1,Q2, R0,R1, S0),
  towt(A, B) := A + t*(B-A),
  [Q0, Q1, Q2] : [towt(P0,P1), towt(P1,P2), towt(P2,P3)],
  [R0, R1]     : [towt(Q0,Q1), towt(Q1,Q2)],
  [S0]         : [towt(R0,R1)],
  ['P0=P0, 'P1=P1, 'P2=P2, 'P3=P3,
   'Q0=Q0, 'Q1=Q1, 'Q2=Q2,
   'R0=R0, 'R1=R1,
   'S0=S0]
  )$

bezier4_export(P0,P1,P2,P3) := block(
  local(b4),
  b4 : bezier4_(P0, P1, P2, P3),
  define(Q0(t), subst(b4, Q0)),
  define(Q1(t), subst(b4, Q1)),
  define(Q2(t), subst(b4, Q2)),
  define(R0(t), subst(b4, R0)),
  define(R1(t), subst(b4, R1)),
  define(S0(t), subst(b4, S0))
  )$

/* (find-es "qdraw" "para")
 * (find-es "qdraw" "pts")
*/
mypara(Poft,  [opts]) := myapply_fl('para, Poft[1],Poft[2], t,0,1, opts);
mypts (PList, [opts]) := myapply_fl('pts,  PList, opts);

bezier4_paras(P0,P1,P2,P3) := block(
  local(Q0,Q1,Q2, R0,R1, S0),
  bezier4_export(P0,P1,P2,P3),
  [mypara(Q0(t), lc(red)),
   mypara(Q1(t), lc(red)),
   mypara(Q2(t), lc(red)),
   mypara(R0(t), lc(orange)),
   mypara(R1(t), lc(orange)),
   mypara(S0(t), lc(forest_green))]
  )$

bezier4_pts(P0,P1,P2,P3,tt,[opts]) := block(
  local(Q0,Q1,Q2, R0,R1, S0),
  bezier4_export(P0,P1,P2,P3),
  [mypts([Q0(tt),Q1(tt),Q2(tt)], pc(red),          opts),
   mypts([R0(tt),R1(tt)],        pc(orange),       opts),
   mypts([S0(tt)],               pc(forest_green), opts)]
  )$


bezier4_all     (P0,P1,P2,P3,tt,[opts]) :=
  [bezier4_paras(P0,P1,P2,P3),
   bezier4_pts  (P0,P1,P2,P3,tt,[opts])]$



/*
* (eepitch-maxima)
* (eepitch-kill)
* (eepitch-maxima)
** (find-angg "MAXIMA/myqdraw2.mac")
load       ("~/MAXIMA/myqdraw2.mac");
load("bezier1.mac");
** define(P(t), bezier4([0,0], [0,1],   [1,1], [1,0]));
** define(P(t), bezier4([0,0], [0,2],   [1,1], [1,0]));
** define(P(t), bezier4([0,0], [0,0.2], [1,1], [1,0]));

** myopts : [];
myopts : [ps(2),pj(1)];

** [P0,P1,P2,P3] : [[0,0], [0,1], [1,1], [1,0]];
[P0,P1,P2,P3] : [[0,0], [0,1], [2,1], [1,0]];
** bezier4_paras(P0,P1,P2,P3);
** bezier4_pts  (P0,P1,P2,P3, 0.2, myopts);

myqdraw(xr(-0.5,2.5),yr(-0.5,2.5),
        makelist(bezier4_all(P0,P1,P2,P3, ttt, myopts), ttt,
                 [0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9]),
        []);

myqdraw(xr(-0.5,2.5),yr(-0.5,2.5),
        bezier4_all  (P0,P1,P2,P3, 0.2, myopts),
        bezier4_all  (P0,P1,P2,P3, 0.2, myopts),
        bezier4_all  (P0,P1,P2,P3, 0.2, myopts),
bezier4_paras(P0,P1,P2,P3),
        bezier4_pts  (P0,P1,P2,P3, 0.2, myopts)
       );


bezier4_pts  (P0,P1,P2,P3, 0.2, myopts);

*/



/*
 * Local Variables:
 * coding:  utf-8-unix
 * End:
*/