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.