Re: Il disegno programmato nell’Arte di scrivere con LaTeX

#72812
OldClaudio
Partecipante
    Up
    0
    Down
    ::


    Anche Lua ha i suoi problemini: ho modificato leggermente il codice già visto permettendo di scegliere il numero di campioni:
    `
    % !TEX TS-program = LuaLaTeX

    \documentclass{standalone}

    \usepackage{pgfplots}
    \usepackage{luacode}

    \begin{luacode*}

    function Liss(val,t)
    return math.sin(val*t)
    end

    function stampa_pgf(a,b,s)

    tex.sprint(“\\addplot[mark=, red, smooth] coordinates{“)

    — 2pi_greco/500=0.0125663
    step=2*math.pi/s
    for i=0,2*math.pi,step do
    x=Liss(a,i)
    y=Liss(b,i)
    tex.sprint(“(“..x..”,”..y..”)”)
    end

    tex.sprint(“};”)
    end

    \end{luacode*}

    \newcommand\myaddplot[3]{\directlua{stampa_pgf(#1,#2,#3)}}

    \begin{document}
    \begin{tikzpicture}
    \begin{axis}
    \myaddplot{7}{2}{1000}
    \end{axis}
    \end{tikzpicture}
    \end{document}

    %%% Local Variables:
    %%% mode: latex
    %%% TeX-engine: luatex
    %%% TeX-master: t
    %%% End:
    `

    Come si vede nelle ultime righe della tikzpicture ho impostato 1000 campioni. se si impostano valori inferiori, la curva di Lissajous non si chiude. Questo dipende dal ciclo for che à basato su numeri reali, quindi anche un minimo arrotondamento o troncamento può rendere verificato il test di fine ciclo prima che in effetti la curva sia chiusa; bisognerebbe avere l’accortezza di eseguire i cicli usando solo numeri interi per “contare” le iterazioni.

    Provate a sostituire 1000 con 750, con 500, e via scendendo; la curva non si chiude mai e quando il numero di campioni scende sotto a 200 si vede ad occhio nudo che pfgplots non ce la fa a rendere la curva come si deve.

    Per sbaglio ho messo una volta il numero 75000 come numero di campioni; sebbene i calcoli li faccia Lua con aritmetica floating point, il tempo che ci mette lascia dubitare che la memoria, oltre che il processore, sia messa a dura prova; però alla fine del calcolo, la lettura del file log è stranamente molto parca; non ho ancora imparato a decifrare completamente le indicazioni che vi appaiono, ma sembra che occupi pochissima memoria.

    Go to top