newptsxy[PTS_] := Block[{ut, i, n}, (n = Length[PTS]; If[n == 1, ut = PTS, ut = Table[y PTS[[i]] + x PTS[[i + 1]], {i, 1.n - 1}]]; Return[ut])] mkpctxy[PTS_] := Block[{i, SEQ, te, n, prev}, (n = Length[PTS]; SEQ = {PTS}; prev = PTS; Do[(te = newptsxy[prev]; SEQ = Append[SEQ, te]; prev = te;), {i, 1, n - 1}]; Return[Map[Expand, SEQ]])] mkpctxy[{P0, P1, P2, P3, P4}] newpts[PTS_, t_] := Block[{ut, i, n}, (n = Length[PTS]; If[n == 1, ut = PTS, ut = Table[(1 - t) PTS[[i]] + t PTS[[i + 1]], {i, 1.n - 1}] ]; Return[ut])] mkpct[PTS_, t_] := Block[{i, SEQ, te, n, prev}, (n = Length[PTS]; SEQ = {PTS}; prev = PTS; Do[ (te = newpts[prev, t]; SEQ = Append[SEQ, te]; prev = te; ), {i, 1, n - 1}]; Return[SEQ])] FF = mkpct[{{1, 2}, {5, 13}, {9, 14}, {16, 12}, {22, 1}}, t] Map[Print, %] boo = Map[Expand, FF[[5]]] ParametricPlot[Evaluate[boo], {t, 0, 1}] mkdisks[PTS_, r_, c_] := Table[{Hue[c], Disk[PTS[[i]], r]}, {i, 1.Length[PTS]}] disp[PTS_, t_, c_] := Block[{i, m, CPS, ut, Ls, Ds, LAP}, (CPS = mkpct[PTS, t]; m = Length[CPS]; LAP = CPS[[m]][[1]]; ut = {}; Ls = Table[{Hue[c/(i^.2)], Thickness[.007], Line[CPS[[i]]]}, {i, 1, m - 1}]; Ds = Table[mkdisks[CPS[[i]], .3/(i^.3), c/(i^.3)], {i, 1, m}]; Show[Graphics[Join[Ls, Ds, {Disk[LAP, .3]}]], AspectRatio -> Automatic, Axes -> True, ImageSize -> 71 6]) ] disp[{{1, 5}, {3, 13}, {7, 16}, {13, 15}, {17, 8}}, .4, .9] << Graphics`Animation` seqraph[PTS_, t_, c_] := Block[{i, m, CPS, ut, Ls, Ds, LAP}, (CPS = mkpct[PTS, t]; m = Length[CPS]; LAP = CPS[[m]][[1]]; ut = {}; Ls = Table[{Hue[c/(i^.2)], Thickness[.007], Line[CPS[[i]]]}, {i, 1, m - 1}]; Ds = Table[mkdisks[CPS[[i]], .3/(i^.3), c/(i^.3)], {i, 1, m}]; Graphics[Join[Ls, Ds, {Disk[LAP, .3]}]]) ] ShowAnimation[ Table[ seqraph[{{1, 2}, {5, 13}, {9, 14}, {16, 12}, {5, 5}, {10, 1}, {15, 4}}, i/50, .9], {i, 1, 49}] ]