Il codice in Lua riceve una curva in forma parametrica e calcola una serie di corde che ne approssimano il supporto senza discostrasi più di un certo valore. Non è ancora finito, vorrei aggiungere un bel grafico, comunque:`\documentclass[12pt,a4paper]{article}
%\usepackage[italian]{babel}
\usepackage{luatextra}
\usepackage{layaureo}
\pagestyle{empty}
\usepackage{booktabs}
\begin{document}
\begin{luacode*}
— dati —
function curva(t)
return {2*math.cos(t),math.sin(t),t}
end
punti={0,1}
tolleranza=0.01
— calcoli —
function distanza(p1,p2)
return math.sqrt((p2[1]-p1[1])^2+(p2[2]-p1[2])^2+(p2[3]-p1[3])^2)
end
function freccia(t1,t2,t3)
local a=distanza(curva(t2),curva(t3))
local b=distanza(curva(t1),curva(t2))
local c=distanza(curva(t1),curva(t3))
return b*math.sin(math.acos((b^2+c^2-a^2)/(2*b*c)))
end
function frecciamax(t1,t3)
local max=0
local t
local n=1000
for i=1,n-1 do
local t2=t1+i*(t3-t1)/n
local f=freccia(t1,t2,t3)
if f>max then
max=f
t=t2
end
end
return {max,t}
end
function infittisci(punti)
for i=1,#punti-1 do
local fm=frecciamax(punti,punti)
if fm[1]>tolleranza then
table.insert(punti,i+1,fm[2])
end
end
return punti
end
repeat
local p=#punti
infittisci(punti)
until #punti==p
for i=1,#punti do
table.insert(punti,i,curva(punti))
table.remove(punti,i+1)
end
corde={}
for i=1,#punti-1 do
table.insert(corde,distanza(punti,punti))
end
angoli={}
for i=1,#corde-1 do
local a=math.acos((corde^2+corde^2-distanza(punti,punti)^2)/(2*corde*corde))
table.insert(angoli,a*180/math.pi)
end
\end{luacode*}
\begin{table}
\caption{Coordinate punti.}
\centering
\medskip
\begin{tabular}{ccc}
\toprule
$x$ & $y$ & $z$ \\
\midrule
\luaexec{
for i=1,\#punti do
tex.sprint(string.format(“\%.3f”,punti[1])..” & “..string.format(“\%.3f”,punti[2])..” & “..string.format(“\%.3f”,punti[3])..” \\\\”)
end
}
\bottomrule
\end{tabular}
\end{table}
\begin{table}
\caption{Lunghezza corde.}
\centering
\medskip
\begin{tabular}{ccc}
\toprule
$l$ \\
\midrule
\luaexec{
for i=1,\#corde do
tex.sprint(string.format(“\%.3f”,corde)..” \\\\”)
end
}
\bottomrule
\end{tabular}
\end{table}
\begin{table}
\caption{Angoli interni.}
\centering
\medskip
\begin{tabular}{ccc}
\toprule
$\alpha$ \\
\midrule
\luaexec{
for i=1,\#angoli do
tex.sprint(string.format(“\%.3f”,angoli)..” \\\\”)
end
}
\bottomrule
\end{tabular}
\end{table}
\end{document}
`
C’è però un problema: se uso babel mi si blocca la compilazione, magari un altro giorno vedo di risolvere la cosa…