Warning: this is an htmlized version!
The original is here, and the conversion rules are here. |
-- This file: -- http://angg.twu.net/LATEX/2021pict2e.lua.html -- http://angg.twu.net/LATEX/2021pict2e.lua -- (find-angg "LATEX/2021pict2e.lua") -- Author: Eduardo Ochs <eduardoochs@gmail.com> -- -- (defun e () (interactive) (find-angg "LATEX/2021pict2e.tex")) -- (defun l () (interactive) (find-angg "LATEX/2021pict2e.lua")) -- See: (find-angg "SRF/srfb.lua" "Pict2e") -- (find-angg "SRF/srfb.lua" "Pict2e-tests") -- (find-angg "SRF/srfb.lua" "Points-tests") -- (find-LATEXfile "2021repl-pict.lua") -- (find-LATEXfile "2021repl-pict.tex") -- (find-angg "LATEX/edrxpict.lua") -- (find-LATEXgrep "grep --color=auto -nH --null -e 2021pict2e.lua *.tex") loaddednat6("dednat6/") -- «.Pict2e» (to "Pict2e") -- «.Pict2e-tests» (to "Pict2e-tests") -- «.Points2» (to "Points2") -- «.Points2-tests» (to "Points2-tests") -- «.PictBounds» (to "PictBounds") -- «.PictBounds-tests» (to "PictBounds-tests") -- «.Pict2eVector» (to "Pict2eVector") -- «.Pict2eVector-tests» (to "Pict2eVector-tests") -- -- «.Piecewise» (to "Piecewise") -- «.Piecewise-tests» (to "Piecewise-tests") -- «.Piecewisify» (to "Piecewisify") -- «.Piecewisify-tests» (to "Piecewisify-tests") -- «.Partition» (to "Partition") -- «.Partition-tests» (to "Partition-tests") -- ____ _ _ ____ -- | _ \(_) ___| |_|___ \ ___ -- | |_) | |/ __| __| __) / _ \ -- | __/| | (__| |_ / __/ __/ -- |_| |_|\___|\__|_____\___| -- -- «Pict2e» (to ".Pict2e") -- Pict2e = Class { type = "Pict2e", new = function () return Pict2e {lines={}, pb=nil} end, from = function (o) if otype(o) == "Pict2e" then return Pict2e {lines = copy(o.lines), pb = o.pb} end if type(o) == "string" then return Pict2e {lines = splitlines(o)} end if type(o) == "table" then return Pict2e {lines = copy(o)} end error("From?") end, Line = function (...) return Points2({...}):Line() end, bounds = function (...) return Pict2e.new():setbounds(...) end, bgat = function (...) return Pict2e.bounds(...):grid():axesandticks() end, -- __tostring = function (p) return p:tostring() end, -- __mul = function (prefix, p) local f = function (li) return prefix..li end return Pict2e {lines = map(f, p.lines), pb = p.pb} end, __add = function (a, b) a = Pict2e.from(a) b = Pict2e.from(b) a.pb = a.pb or b.pb for _,li in ipairs(b.lines) do table.insert(a.lines, li) end return a end, -- __index = { -- -- Functions to convert a Pict2e object to a string. -- Inside dednat6 it is better to make suffix = "%". -- suffix = "", tolatex = function (p) return p:tostring("%") end, tostring = function (p, suffix) local f = function (li) return li..(suffix or p.suffix) end return mapconcat(f, p.lines, "\n") end, output = function (p) output(p:tolatex()); return p end, -- -- Append lines. add = function (p, p2) for _,line in ipairs(Pict2e.from(p2).lines) do table.insert(p.lines, line) end return p end, -- beginend = function (p, str1, str2) return str1 + (" " * p) + str2 end, wrapin = function (p, str1, str2) return str1 + (" " * (p + str2)) end, as = function (p, str) return p:wrapin("{"..str, "}") end, color = function (p, color) return p:as("\\color{"..color.."}") end, grid_ = "\\color{GrayPale}\\linethickness{0.3pt}", axes_ = "\\linethickness{0.5pt}", asgrid = function (p) return p:as(p.grid_) end, asaxes = function (p) return p:as(p.axes_) end, def = function (p, name) return p:wrapin("\\def\\"..name.."{", "}") end, -- bep = function (p) return p:beginend(p.pb:beginpicture(), "\\end{picture}") end, bepc = function (p) return p:bep():wrapin("\\myvcenter{", "}") end, bepcb = function (p) return p:bepc():wrapin("\\bhbox{$", "$}") end, -- -- Set or change the PictBounds field. setbounds = function (p, ab, cd, e) p.pb = PictBounds.new(ab, cd, e) return p end, -- -- Append grids, axes, and ticks to an existing Pict2e object. grid0 = function (p) return p.pb:grid() end, grid = function (p) return p:add(p:grid0():asgrid()) end, axesandticks0 = function (p) return p.pb:axesandticks() end, axesandticks = function (p) return p:add(p:axesandticks0():asaxes()) end, grat = function (p) return p:grid():axesandticks() end, -- -- Append other things. Line = function (p, ...) return p:add(Pict2e.Line(...)) end, Thick = function (p, str) return p:add("\\linethickness{"..str.."}") end, put = function (p, xy, str) return p:add(pformat("\\put%s{%s}", xy, str)) end, putcell = function (p, xy, str) return p:put(xy, "\\cell{"..str.."}") end, puttext = function (p, xy, str) return p:putcell(xy, "\\text{"..str.."}") end, run = function (p, f) f(p); return p end, }, } --[[ * (eepitch-lua51) * (eepitch-kill) * (eepitch-lua51) dofile "2021pict2e.lua" = mapconcat(function (n) return "#"..n end, seq(2, 5)) --]] -- «Pict2e-tests» (to ".Pict2e-tests") --[[ * (eepitch-lua51) * (eepitch-kill) * (eepitch-lua51) dofile "2021pict2e.lua" = Pict2e.from "A" = Pict2e.from {"A", "B"} = Pict2e.from( Pict2e.from {"A", "B"} ) p = Pict2e.from({"aa", "bbb"}) = p = p :tostring("%!") = " " * p = p + p = p + "cccc" = p + {"cccc", "dd"} = "00" + p = {"1", "2"} + p = p:beginend("\\begin{foo}", "\\end{foo}") = p:wrapin ("\\begin{foo}", "\\end{foo}") = p:color("red") = p:asgrid() = p:asaxes() p = Pict2e.from({"aa", "bbb", "cccc"}) PPPV(p) = p:tostring("%") = p:tostring("") = p = p:color("red") = p = Pict2e.Line(v(1,2), v(3,4)):Line(v(0,1), v(2,3), v(4,5)) * (eepitch-lua51) * (eepitch-kill) * (eepitch-lua51) dofile "2021pict2e.lua" p = Pict2e.bounds(v(0,0), v(3,2)) = p.pb = p:Line(v(0,1), v(2,3)):color("red") = p:Line(v(0,1), v(2,3)):color("red").pb = Pict2e.bounds(v(0,0), v(3,2)):grid():axesandticks() = Pict2e.bounds(v(0,0), v(3,2)):grid():axesandticks():bep() --]] -- ____ _ _ -- | _ \ ___ (_)_ __ | |_ ___ -- | |_) / _ \| | '_ \| __/ __| -- | __/ (_) | | | | | |_\__ \ -- |_| \___/|_|_| |_|\__|___/ -- -- «Points2» (to ".Points2") Points2 = Class { type = "Points2", new = function () return Points2 {} end, __tostring = function (pts) return pts:tostring() end, __index = { tostring = function (pts, sep) return mapconcat(tostring, pts, sep or "") end, add = function (pts, pt) table.insert(pts, pt) return pts end, adds = function (pts, pts2) for _,pt in ipairs(pts2) do table.insert(pts, pt) end return pts end, rev = function (pts) local pr = Points2.new() for i=#pts,1,-1 do table.insert(pr, pts[i]) end return pr end, -- pict2e = function (pts, prefix) return Pict2e.from(prefix .. tostring(pts)) end, Line = function (pts) return pts:pict2e("\\Line") end, polygon = function (pts) return pts:pict2e("\\polygon") end, region0 = function (pts) return pts:pict2e("\\polygon*") end, region = function (pts, color) return pts:region0():color(color) end, -- polygon = function (pts, s) return pts:pict2e("\\polygon"..(s or "")) end, }, } -- «Points2-tests» (to ".Points2-tests") --[[ * (eepitch-lua51) * (eepitch-kill) * (eepitch-lua51) dofile "2021pict2e.lua" pts = Points2 {v(1,2), v(3,4), v(5,6)} = pts = pts:Line() = pts:rev() = pts:add(pts:rev()):region("red") = pts --]] -- ____ _ _ ____ _ -- | _ \(_) ___| |_| __ ) ___ _ _ _ __ __| |___ -- | |_) | |/ __| __| _ \ / _ \| | | | '_ \ / _` / __| -- | __/| | (__| |_| |_) | (_) | |_| | | | | (_| \__ \ -- |_| |_|\___|\__|____/ \___/ \__,_|_| |_|\__,_|___/ -- -- «PictBounds» (to ".PictBounds") -- (find-LATEX "edrxpict.lua" "pictp0-pictp3") -- (find-es "pict2e" "picture-mode") -- (find-kopkadaly4page (+ 12 288) "\\begin{picture}(x dimen,y dimen)") -- (find-kopkadaly4text (+ 12 288) "\\begin{picture}(x dimen,y dimen)") -- (find-kopkadaly4page (+ 12 301) "13.1.6 Shifting a picture environment") -- (find-kopkadaly4text (+ 12 301) "13.1.6 Shifting a picture environment") -- (find-kopkadaly4page (+ 12 302) "\\begin{picture}(x dimen,y dimen)(x offset,y offset)") -- (find-kopkadaly4text (+ 12 302) "\\begin{picture}(x dimen,y dimen)(x offset,y offset)") PictBounds = Class { type = "PictBounds", new = function (ab, cd, e) local a,b = ab[1], ab[2] local c,d = cd[1], cd[2] local x1,x2 = min(a,c), max(a,c) local y1,y2 = min(b,d), max(b,d) return PictBounds {x1=x1, y1=y1, x2=x2, y2=y2, e=e or .2} end, __tostring = function (pb) return pb:tostring() end, __index = { x0 = function (pb) return pb.x1 - pb.e end, x3 = function (pb) return pb.x2 + pb.e end, y0 = function (pb) return pb.y1 - pb.e end, y3 = function (pb) return pb.y2 + pb.e end, p0 = function (pb) return v(pb.x1 - pb.e, pb.y1 - pb.e) end, p1 = function (pb) return v(pb.x1, pb.y1 ) end, p2 = function (pb) return v(pb.x2, pb.y2 ) end, p3 = function (pb) return v(pb.x2 + pb.e, pb.y2 + pb.e) end, tostring = function (pb) return pformat("LL=(%s,%s) UR=(%s,%s) e=%s", pb.x1, pb.y1, pb.x2, pb.y2, pb.e) end, -- beginpicture = function (pb) local dimen = pb:p3() - pb:p0() local center = (pb:p3() + pb:p0()) * 0.5 local offset = pb:p0() return pformat("\\begin{picture}%s%s", dimen, offset) end, -- grid = function (pb) local p = Pict2e.from {"% Grid", "% Horizontal lines:"} for y=pb.y1,pb.y2 do p:Line(v(pb:x0(), y), v(pb:x3(), y)) end p:add("% Vertical lines:") for x=pb.x1,pb.x2 do p:Line(v(x, pb:y0()), v(x, pb:y3())) end return p end, ticks = function (pb, e) e = e or .2 local p = Pict2e.from {"% Ticks", "% On the vertical axis:"} for y=pb.y1,pb.y2 do p:Line(v(-e, y), v(e, y)) end p:add("% On the horizontal axis: ") for x=pb.x1,pb.x2 do p:Line(v(x, -e), v(x, e)) end return p end, axes = function (pb) return "% Axes" + Pict2e.Line(v(pb:x0(), 0), v(pb:x3(), 0)) + Pict2e.Line(v(0, pb:y0()), v(0, pb:y3())) end, axesandticks = function (pb) return pb:axes() + pb:ticks() end, }, } -- «PictBounds-tests» (to ".PictBounds-tests") -- (find-LATEX "edrxpict.lua" "pictp0-pictp3") --[[ * (eepitch-lua51) * (eepitch-kill) * (eepitch-lua51) dofile "2021pict2e.lua" = PictBounds.new(v(-1,-2), v( 3, 5)) = PictBounds.new(v( 3, 5), v(-1,-2)) = PictBounds.new(v( 3, 5), v(-1,-2), 0.5) pb = PictBounds.new(v(-1,-2), v( 3, 5)) = pb:p0() = pb:p1() = pb:p2() = pb:p3() = pb:grid() = pb:ticks() = pb:axes() = pb = pb:beginpicture() = pb:p0() = (pb:p0() + pb:p3()) = (pb:p0() + pb:p3()) * 0.5 --]] -- ____ _ _ ____ __ __ _ -- | _ \(_) ___| |_|___ \ __\ \ / /__ ___| |_ ___ _ __ -- | |_) | |/ __| __| __) / _ \ \ / / _ \/ __| __/ _ \| '__| -- | __/| | (__| |_ / __/ __/\ V / __/ (__| || (_) | | -- |_| |_|\___|\__|_____\___| \_/ \___|\___|\__\___/|_| -- -- «Pict2eVector» (to ".Pict2eVector") -- See: (find-LATEX "edrxpict.lua" "pict2evector") -- (find-LATEX "edrxgac2.tex" "pict-Vector") -- Pict2eVector = Class { type = "Pict2eVector", __index = { }, } -- «Pict2eVector-tests» (to ".Pict2eVector-tests") -- ____ _ _ -- | _ \(_) ___ ___ _____ _(_)___ ___ -- | |_) | |/ _ \/ __/ _ \ \ /\ / / / __|/ _ \ -- | __/| | __/ (_| __/\ V V /| \__ \ __/ -- |_| |_|\___|\___\___| \_/\_/ |_|___/\___| -- -- «Piecewise» (to ".Piecewise") -- From: (find-LATEX "edrxpict.lua" "Piecewise") -- Piecewise = Class { new = function (str) return Piecewise{points={}, pictlines={}, pictdots={}}:add(str) end, type = "Piecewise", __tostring = function (pw) return pw:pointstrs() end, __index = { npoints = function (pw) return #pw.points end, tostring = function (pw) return pw:pointstrs() end, pointstrs = function (pws, sep) local strs = {} for i=1,#pw.points do local p = pw.points[i] local conn,x,y,oc = p.conn or " ", p.x, p.y, p.oc or "" table.insert(strs, format("%s(%s,%s)%s", conn, x, y, oc)) end return table.concat(strs, sep or " ") end, -- -- Add points and segments. -- Example: pw:add("(0,1)o--(1,1)o (1,2)c (1,3)o--(2,3)c--(3,2)--(4,2)c") add = function (pw, str) local pat = "([- ]*)%(([-%d.]+),([-%d.]+)%)([oc]?)" for conn,x,y,oc in str:gmatch(pat) do conn, x, y = (conn:match"-" and "--"), x+0, y+0 table.insert(pw.points, {conn=conn, x=x, y=y, oc=oc}) -- pw:pushpoint(conn, x, y, oc) end return pw end, -- -- Express a piecewise function as a Lua function. condstbl = function (pw) local conds = {} for i=1,#pw.points do local P0,P1,P2 = pw.points[i], pw.points[i+1], pw.points[i+2] local p0,p1,p2 = P0, P1 or {}, P2 or {} local x0,y0,oc0 = p0.x, p0.y, p0.oc local x1,y1,oc1,conn1 = p1.x, p1.y, p1.oc, p1.conn local x2,y2,oc2,conn2 = p2.x, p2.y, p2.oc, p2.conn -- PP(oc0, conn1) if oc0 ~= "o" then local cond = format("(%s == x) and %s", x0, y0) table.insert(conds, cond) end if conn1 then local cond = format("(%s < x and x < %s)", x0, x1) if y1 == y0 then cond = format("%s and %s", cond, y0) else cond = format("%s and (%s + (x - %s)/(%s - %s) * (%s - %s))", cond, y0, x0, x1, x0, y1, y0 ) end table.insert(conds, cond) end end return conds end, conds = function (pw) return table.concat(pw:condstbl(), " or\n") end, fun0 = function (pw) return "function (x) return (\n"..pw:conds().."\n) end" end, fun = function (pw) return expr(pw:fun0()) end, -- -- Get lines and open/closed points, for drawing. getj = function (pw, i) return (pw.points[i+1] and pw.points[i+1].conn and pw:getj(i+1)) or i end, getijs = function (pw) local i, j, ijs = 1, pw:getj(1), {} while true do if i < j then table.insert(ijs, {i, j}) end i = j + 1 j = pw:getj(i) if pw:npoints() < i then return ijs end end end, getpoint = function (pw, i) return v(pw.points[i].x, pw.points[i].y) end, getpoints = function (pw, i, j) local ps = Points2.new() for k=i,j do ps:add(pw:getpoint(k)) end return ps end, topict = function (pw) cmds = Pict2e.new() for _,ij in ipairs(pw:getijs()) do cmds:add(pw:getpoints(ij[1], ij[2]):Line()) end for i,p in ipairs(pw.points) do if p.oc == "o" then cmds:add(formatt("\\put%s{\\opendot}", pw:getpoint(i))) elseif p.oc == "c" then cmds:add(formatt("\\put%s{\\closeddot}", pw:getpoint(i))) end end return cmds end, }, } pictpiecewise = function (str) return Piecewise.new(str):topict() end -- «Piecewise-tests» (to ".Piecewise-tests") --[[ * (eepitch-lua51) * (eepitch-kill) * (eepitch-lua51) dofile "2021pict2e.lua" Pict2e.__index.suffix = "%" str = "(0,1)o--(1,1)o (1,2)c (1,3)o--(2,3)c--(3,2)--(4,2)c" pw = Piecewise.new(str) PPV(pw.points) = pw = pw:pointstrs("") = pw:pointstrs(" ") = pw:conds() = pw:fun0() = pw:fun() = pw:fun()(1) = pw:fun()(2) = pw:fun()(2.5) * (eepitch-lua51) * (eepitch-kill) * (eepitch-lua51) dofile "2021pict2e.lua" Pict2e.__index.suffix = "%" str = "(0,1)o--(1,1)o (1,2)c (1,3)o--(2,3)c--(3,2)--(4,2)c" pw = Piecewise.new(str) PPV(pw:getijs()) = pw:topict() = pictpiecewise(str) --]] -- ____ _ _ _ __ -- | _ \(_) ___ ___ _____ _(_)___(_)/ _|_ _ -- | |_) | |/ _ \/ __/ _ \ \ /\ / / / __| | |_| | | | -- | __/| | __/ (_| __/\ V V /| \__ \ | _| |_| | -- |_| |_|\___|\___\___| \_/\_/ |_|___/_|_| \__, | -- |___/ -- -- «Piecewisify» (to ".Piecewisify") -- From: (find-LATEX "2021-1-C2-critical-points.lua" "Piecewisify") Piecewisify = Class { type = "Piecewisify", new = function (f, ...) return Piecewisify({f=f}):setpoints(...) end, __index = { addpoint = function (pwi, p) if type(p) ~= "number" then PP("Not a number:", p); error() end pwi.points:add(p) return pwi end, addlistofpoints = function (pwi, A) for _,p in ipairs(A) do pwi:addpoint(p) end return pwi end, addpoints = function (pwi, ...) for _,o in ipairs({...}) do if type(o) == "number" then pwi:addpoint(o) elseif type(o) == "table" then pwi:addlistofpoints(o) else PP("not a point or a list of points:", o); error() end end return pwi end, setpoints = function (pwi, ...) pwi.points = SetL.new() return pwi:addpoints(...) end, -- See: (find-angg "LUA/lua50init.lua" "SetL") -- pointsin = function (pwi, a, b) local A = {} for _,x in ipairs(pwi.points:ks()) do if a < x and x < b then table.insert(A, x) end end return A end, -- eps = 1/32768, delta = 1/128, hasjump = function (pwi, x0, x1) local y0,y1 = pwi.f(x0), pwi.f(x1) return math.abs(y1-y0) > pwi.delta end, hasjumpl = function (pwi, x) return pwi:hasjump(x - pwi.eps, x) end, hasjumpr = function (pwi, x) return pwi:hasjump(x, x + pwi.eps) end, -- xy = function (pwi, x, y) return pformat("(%s,%s)", x, y or pwi.f(x)) end, xyl = function (pwi, xc) return pwi:xy(xc - pwi.eps) end, xyr = function (pwi, xc) return pwi:xy(xc + pwi.eps) end, jumps_and_xys = function (pwi, xc) local xyl, xyc, xyr = pwi:xyl(xc), pwi:xy(xc), pwi:xyr(xc) local jumpl = pwi:hasjumpl(xc) and "l" or "" local jumpr = pwi:hasjumpr(xc) and "r" or "" local jumps = jumpl..jumpr return jumps, xyl, xyc, xyr end, piecewise_m = function (pwi, xc) -- "m" is for "middle" local jumps, xyl, xyc, xyr = pwi:jumps_and_xys(xc) if jumps == "" then str = xyc elseif jumps == "l" then str = format("%so %sc", xyl, xyc) elseif jumps == "r" then str = format("%sc %so", xyc, xyr) elseif jumps == "lr" then str = format("%so %sc %so", xyl, xyc, xyr) end return str end, piecewise = function (pwi, a, b, method, sep) local method, sep = method or "piecewise_m", sep or "--" local f = function (x) return pwi[method](pwi, x) end local str = pwi:xyr(a) -- for _,x in ipairs(pwi.points:ks()) do -- if a < x and x < b then -- str = str..sep..f(x) -- end -- end for _,x in ipairs(pwi:pointsin(a, b)) do str = str..sep..f(x) end str = str..sep..pwi:xyl(b) return str end, pw = function (pwi, a, b) return pictpiecewise(pwi:piecewise(a, b)) end, -- lineify = function (pwi, a, b) return "\\Line"..pwi:piecewise(a, b, nil, "") end, -- -- See: (find-LATEX "edrxpict.lua" "Piecewise") -- (find-LATEX "edrxpict.lua" "Piecewise" "pictpiecewise =") -- piecewise_pol1 = function (pwi, xc) -- for polygons local jumps, xyl, xyc, xyr = pwi:jumps_and_xys(xc) if jumps == "" then return xyc else return format("%s%s", xyl, xyr) end end, piecewise_pol = function (pwi, a, b) local a0, b0 = pwi:xy(a, 0), pwi:xy(b, 0) return a0..pwi:piecewise(a, b, "piecewise_pol1", "")..b0 end, pol = function (pwi, a, b, star) -- return "\\polygon"..(star or "")..pwi:piecewise_pol(a, b) return Pict2e.from("\\polygon"..(star or "")..pwi:piecewise_pol(a, b)) end, -- inforsup = function (pwi, maxormin, a, b) local y = pwi.f(a) local consider = function (x) y = maxormin(y, pwi.f(x)) end consider(a + pwi.eps) for _,x in ipairs(pwi:pointsin(a, b)) do consider(x - pwi.eps) consider(x) consider(x + pwi.eps) end consider(b - pwi.eps) consider(b) return y end, inf = function (pwi, a, b) return pwi:inforsup(min, a, b) end, sup = function (pwi, a, b) return pwi:inforsup(max, a, b) end, max = function (pwi, a, b) return max(pwi.f(a), pwi.f(b)) end, min = function (pwi, a, b) return min(pwi.f(a), pwi.f(b)) end, zero = function (pwi) return 0 end, method = function (pwi, mname, a, b) return pwi[mname](pwi, a, b) end, rct = function (pwi, mname1, mname2, a, b) local y1 = pwi:method(mname1, a, b) local y2 = pwi:method(mname2 or "zero", a, b) return pformat("(%s,%s)(%s,%s)(%s,%s)(%s,%s)", a,y1, a,y2, b,y2, b,y1) end, rects = function (pwi, ptn, mname1, mname2, star) local p = Pict2e.new() for i=1,ptn:N() do local ai,bi = ptn:ai(i), ptn:bi(i) local rct = pwi:rct(mname1, mname2, ai, bi) p:add(format("\\polygon%s%s\n", star or "*", rct)) end return p end, }, } -- «Piecewisify-tests» (to ".Piecewisify-tests") --[[ * (eepitch-lua51) * (eepitch-kill) * (eepitch-lua51) dofile "2021pict2e.lua" Pict2e.__index.suffix = "%" -- (find-LATEX "2021-1-C2-critical-points.lua" "f_parabola_preferida") f_parabola_preferida = function (x) return 4 - (x-2)^2 end f_parabola_2 = function (x) if x <= 4 then return f_parabola_preferida(x) end if x < 5 then return 2 end if x == 5 then return 3 end if x < 6 then return 1 end return 0 end pwi = Piecewisify {f = f_parabola_2} pwi:setpoints(2, 3, seq(0, 1, 0.25)) pwi = Piecewisify.new(f_parabola_2, seq(0, 4, 0.25), 5, 6) pwi = Piecewisify.new(f_parabola_2, seq(0, 4, 1 ), 5, 6) = pwi.points:ksc(" ") = pwi:piecewise_m(2) = pwi:piecewise_m(4) = pwi:piecewise_m(5) = pwi:piecewise_m(6) = pwi:piecewise(0, 7) = pwi:pw(0, 7) = pwi:piecewise_pol(0, 7) = pwi:pol(0, 7) = pwi:pol(0, 7, "*") = pwi:sup(0.5, 2.5) = pwi:inf(0.5, 2.5) = pwi:rct("sup", "inf", 0.5, 2.5) = pwi:rects(Partition.new(0, 2):splitn(4), "sup") = pwi:rects(Partition.new(0, 2):splitn(4), "sup", "inf") --]] -- ____ _ _ _ _ -- | _ \ __ _ _ __| |_(_) |_(_) ___ _ __ -- | |_) / _` | '__| __| | __| |/ _ \| '_ \ -- | __/ (_| | | | |_| | |_| | (_) | | | | -- |_| \__,_|_| \__|_|\__|_|\___/|_| |_| -- -- «Partition» (to ".Partition") -- From: (find-LATEX "2021-1-C2-critical-points.lua" "Partition") -- Partition = Class { type = "Partition", new = function (a, b) return Partition {points={a,b}} end, __index = { a = function (ptn) return ptn.points[1] end, b = function (ptn) return ptn.points[#ptn.points] end, N = function (ptn) return #ptn.points - 1 end, ai = function (ptn, i) return ptn.points[i] end, bi = function (ptn, i) return ptn.points[i+1] end, bminusa = function (ptn) return ptn:b() - ptn:a() end, splitn = function (ptn, N) local points = {} local Delta = ptn:bminusa() for k=0,N do table.insert(points, ptn:a() + Delta*(k/N)) end return Partition {points=points} end, }, } -- «Partition-tests» (to ".Partition-tests") --[[ * (eepitch-lua51) * (eepitch-kill) * (eepitch-lua51) dofile "2021pict2e.lua" ptn = Partition.new(2, 10) PPV(ptn) PPV(ptn:splitn(4)) ptn = Partition.new(2, 10):splitn(4) for i=1,ptn:N() do print(i, ptn:ai(i), ptn:bi(i)) end --]] -- Local Variables: -- coding: utf-8-unix -- End: