Risposte nei forum create
-
AutoreRisposte
-
::
ansys” post=62136Ad essere belli, sono belli; ma se non si vede il codice servono a poco 🙂 .
Ciao
OrlandoBé…. se volete vedere il codice, ecco quello della seconda figura:
`
% !TEX encoding = UTF-8
% !TEX program = LuaLaTeX
% !TEX spellcheck = en_GB
\documentclass{report}%standalone}\usepackage[%showframe,
a4paper,
margin = 1cm]{geometry}\usepackage{tikz}
\usetikzlibrary{arrows}\input{ProveSingoleFunzioni_Fun.tex}
\directlua{
require “math”
dofile(“Lua/BasicFunctions.lua”)
dofile(“Lua/CreateObjects.lua”)
dofile(“Lua/3Dfunctions.lua”)
dofile(“Lua/PrintTikZfunctions.lua”)
}\begin{document}
\centering
\begin{tikzpicture}[line join=round,thick,>=angle 45]
\colorlet{plume}{brown}
\directlua{
eye = {5,-5,5.5}
look_at = {0,0,0}
theta = 0%%%%%%%%%%%%%%%%%%%%
% REFERENCES AXIS %
%%%%%%%%%%%%%%%%%%%%
refAxisLength = 3
O = {0,0,0}
refX = {refAxisLength,0,0}
refY = {0,refAxisLength,0}
refZ = {0,0,refAxisLength}
refAxis = Group(PointsCurve({O,refX},”->”),
PointsCurve({O,refY},”->”),
PointsCurve({O,refZ},”->”),
Node(refX,”left”,”$x$”),
Node(refY,”right”,”$y$”),
Node(refZ,”above”,”$z$”))%%%%%%%%%
% TORUS %
%%%%%%%%%
R = 3.2
rr = 1
rz = 3
CenterPoint = {0,0,0}
nU = 100
nV = 10
torus = Torus(R,rr,rz,CenterPoint,nU,nV,”fill=plume,fill opacity=.2″,”half”)%%%%%%%%%%%%%%%%%%%%%
% CROSSING I xR-rr %
%%%%%%%%%%%%%%%%%%%%%%
xII = R+.5
PIIin = {xII, math.sqrt((R+A)^2-xII^2),z}
PIIout = {xII,-math.sqrt((R+A)^2-xII^2),z}InnerLeftLaser = PointsCurve({PIIin,PIIout},”red,dashed”)
%%%%%%%%%%%%%%%%%%%%%%%
% INNER CIRCUMFERENCE %
%%%%%%%%%%%%%%%%%%%%%%%
alphaIN = 102.5
alphaINdashed = 360-alphaINInnerCircumference = Arc(R-rr,O,alphaIN,alphaIN,””)
InnerCircumference = rotate(InnerCircumference,O,{0,0,1},135-alphaIN/2)InnerCircumferenceDashed = Arc(R-rr,O,alphaINdashed,alphaINdashed,”dashed”)
InnerCircumferenceDashed = rotate(InnerCircumferenceDashed,O,{0,0,1},135-alphaINdashed/2-180)%%%%%%%%%%%%%%%%%%%%%%%
% OUTER CIRCUMFERENCE %
%%%%%%%%%%%%%%%%%%%%%%%
alphaOUT = 180
alphaOUTdashed = 360-alphaOUTOuterCircumference = Arc(R+rr,O,alphaOUT,alphaOUT,””)
OuterCircumference = rotate(OuterCircumference,O,{0,0,1},-135)OuterCircumferenceDashed = Arc(R+rr,O,alphaOUTdashed,alphaOUTdashed,”dashed”)
OuterCircumferenceDashed = rotate(OuterCircumferenceDashed,O,{0,0,1},45)%%%%%%%%%%%%%%%%
% RISING PHASE %
%%%%%%%%%%%%%%%%
RisingPhase = Polygon(“fill=green!60!black,fill opacity=.5″,{R-rr,0,0},{R,0,rz},{R-rr,0,rz})%%%%%%%%%%
% LASERS %
%%%%%%%%%%
yL = -6%-> Central Laser
PIL1 = {xI,yL,z}
PIL2 = {0,0,z}
PIL3 = {xI,-yL,z}
OuterCentralLaser1 = PointsCurve({PIL1,PIin2},”red,overlay”)
OuterCentralLaser2 = PointsCurve({PIout2,PIL2},”red,overlay”)
OuterCentralLaser3 = PointsCurve({PIL2,PIin1},”red,overlay”)
OuterCentralLaser4 = PointsCurve({PIout1,PIL3},”red,overlay”)%-> Outer Laser
PIIL = {xII,yL,z}
PIIL2 = {xII,-yL,z}
OuterLeftLaser1 = PointsCurve({PIIL,PIIout},”red,overlay”)
OuterLeftLaser2 = PointsCurve({PIIin,PIIL2},”red,overlay”)%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% PARTICLES TRAJECTORIES RIGHT %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
TrajectoriesLeft = Group()n = 50
for i=1,4 do
RadiusX = (1-(i-1)/4)*rr
RadiusZ = (1-(i-1)/4)*rz
Radius = R-rr+RadiusX
Xformula = Radius..”+”..RadiusX..”*math.cos(v)”
Zformula = RadiusZ..”*math.sin(v)”TrajectoriesLeft = ParametricCurve(“v”,Xformula,
“0”,
Zformula,
0,
math.pi,
n,
“<-") end %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % PARTICLES TRAJECTORIES CENTER % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% TrajectoriesRight1 = Group() TrajectoriesRight2 = Group() n = 50 for i=1,4 do RadiusX = (1-(i-1)/4)*rr RadiusZ = (1-(i-1)/4)*rz Radius = R-rr+RadiusX Yformula1 = Radius.."+"..RadiusX.."*math.cos(v)" Yformula2 = "-"..Radius.."+"..RadiusX.."*math.cos(v)" Zformula = RadiusZ.."*math.sin(v)" TrajectoriesRight1[i] = ParametricCurve("v","0", Yformula1, Zformula, 0, math.pi, n, "<-") TrajectoriesRight2[i] = ParametricCurve("v","0", Yformula2, Zformula, 0, math.pi, n, "->“)end
%%%%%%%%%%%%%%%
% NOZZLE AXIS %
%%%%%%%%%%%%%%%
H = rz+3
hp = .6
nA1 = {0,0,H}
nA2 = {0,0,hp}
nozzleAxis1 = PointsCurve({O,nA2},”loosely dashed”)
nozzleAxis2 = PointsCurve({nA2,nA1},”loosely dashed”)%%%%%%%%%%
% LABELS %
%%%%%%%%%%
Lcl = Node(PIL3,”red,above,overlay”,”Center laser position”)
Lll = Node(PIIL2,”red,above,overlay”,”Left laser position”)dl = Special(“\string\\draw[latex-latex] (VAR1)–(VAR2)node[sloped,midway,fill=white]{$d_l$};”,PIL1,PIIL)
CP1 = Special(“\string\\fill[red] (VAR1)circle[radius=.071]”..
“node[anchor=south east]{1};”,PIin2)
CP2 = Special(“\string\\fill[red] (VAR1)circle[radius=.071]”..
“node[anchor=north west]{2};”,PIout2)
CP3 = Special(“\string\\fill[red] (VAR1)circle[radius=.071]”..
“node[anchor=east]{3};”,PIin1)
CP4 = Special(“\string\\fill[red] (VAR1)circle[radius=.071]”..
“node[anchor=north west]{4};”,PIout1)LP1 = Special(“\string\\fill[red] (VAR1)circle[radius=.071]”..
“node[anchor=north west]{1};”,PIIout)
LP2 = Special(“\string\\fill[red] (VAR1)circle[radius=.071]”..
“node[anchor=north west]{2};”,PIIin)Lrp = Special(“\string\\draw[line width=.4cm,green!60!black,opacity=.5,overlay] (VAR1)–++(.4,0)node[black,opacity=1,anchor=west,inner xsep=1pt,line width=.5pt]{= Rising phase};”,{R+1,R+.5,rz/2})
Lna = Node(nA1,”above”,”Nozzle axis”)
Labels = Group(Lcl,Lll,dl,CP1,CP2,CP3,CP4,LP1,LP2,Lrp,Lna)
%%%%%%%%%
% SCENA %
%%%%%%%%%
scena = CreateScene(“nozzleAxis1”,
“OuterCentralLaser2”,
“OuterLeftLaser2”,
“OuterCentralLaser4”,
“InnerCentralLaser1”,
“InnerCentralLaser2”,
“InnerLeftLaser”,
“InnerCircumference”,
“InnerCircumferenceDashed”,
“OuterCircumference”,
“OuterCircumferenceDashed”,
“torus”,
“OuterCentralLaser1”,
“OuterLeftLaser1”,
“OuterCentralLaser3”,
“TrajectoriesLeft”,
“TrajectoriesRight1”,
“TrajectoriesRight2”,
“RisingPhase”,
“nozzleAxis2”,
“Labels”
% ,”refAxis”)
PrintTikZ(eye,look_at,theta,scena)
}
\end{tikzpicture}
\end{document}
`Con le figure che ho postato speravo di incuriosire qualcuno….
Quando riuscirò a mettere il render al tutto, ovviamente il codice si accorcerebbe un bel po’
Saluti
Michele
::
Ciao a tutti,in questi giorni sto scrivendo la tesi e per l’occasione sto usando il codice Lua da me scritto per fare dei disegni 3D. Ecco i risultati

Purtroppo prima di incominciare a scrivere non sono riuscito a scrivere la parte d codice che riguarda il rendering, quindi quando creo la scena praticamente fornisco la lista degli oggetti da stampare nell’ordine giusto.
Rispetto alla volta precedente ho creato delle funzioni in più come la forma del toroide,e la funzione special, analoga a quella di Sketch.
Una volta che si conosce come funziona il tutto, si può ottenere dei risultati veramente ottimi.
Comunque, quando finalmente avrò fatto la difesa della tesi, se qualcuno si vuole unire a questo progetto, ne sarei molto contento. Potrebbe nascere qualcosa di molto interessante.
Saluti
Michele
::Prima di reinventare la ruota io darei un’occhiata alla possibilità di caricare librerie scritte in altri linguaggi. Questa è una caratteristica importante di Lua, implementata a basso livello in modo da renderla indipendente dal sistema operativo (più o meno).
La chiamata dovrebbe essere questa qui:
http://www.lua.org/manual/5.1/manual.html#pdf-package.loadlibCi sono diverse librerie in giro. Io comincerei a vedere se si può integrare nel codice Lua la GSL: http://www.gnu.org/software/gsl/
Bé… se vogliamo approfondire questo aspetto allora c’è anche il binding tra Lua e OpenGL, cioé LuaGL e tutto il 3D(soprattutto il rendering) potrebe essere fatto fare a lui.
Purtroppo su questo aspetto della programmazione(binding, librerie etc etc) sono un completo ignorante.
Basti pensare che ho installato LuaForWindows ed alla linea CLUAINPUT del file texmf.cnf di LuaTeX ho messo il percorso della cartella dove ci sono tutti i bindings con le librerie C. Alcune funzionano ed altre no ed il motivo per me è completamente ignoto.
Per quanto riguarda il progettino che sto facendo, il codice originale di Sketch non si appoggia su nessuna libreria C per fare operazioni vettoriali(basti guardare il file geometry.c dove sono definite le funzioni dot, cross etc…), probabilmente per essere indipendente da qualsiasi libreria ed io ho seguito la stessa scelta.
Comunque sono aperto a qualsiasi consiglio, istruzione.
Fatemi sapere.
Saluti
Michele
::Molto interessante.
Non ho capito il problema della mancanza di funzioni per il calcolo vettoriale.
Sono presenti sia in Matlab che in Sketch.Ciao,
Agostino…ma non in Lua, o meglio c’è la libreria numlua ma è un progetto “nuovo” ed in costate evoluzione, quindi ho deciso che man mano che mi servivano delle funzioni “base” le avrei scritte io.
La mia idea, comunque, è quella di non scrivere funzioni “complicate” come lo sweep di Sketch, ma eventualmente di scrivere un plug-in di Blender che esporti i modelli come li ho organizzati io(così finalmente imparare ad usare Python).
Michele
::
Aggiornamenti per chi fosse interessato:Ho dato una bella pulita e riorganizzata a tutto il codice Lua ed ora con un codice come il seguente:
`% !TEX encoding = UTF-8
% !TEX program = LuaLaTeX
% !TEX spellcheck = en_GB
\documentclass{standalone}\usepackage{tikz}
\directlua{
require “math”
dofile(“BasicFunctions.lua”)
dofile(“CreateObjects.lua”)
dofile(“3Dfunctions.lua”)
dofile(“PrintTikZfunctions.lua”)
}\begin{document}
\begin{tikzpicture}[line join=round]
\directlua{
eye = {5,5,4}
look_at = {1,3,2}
theta = 0lp = 7
pavimento = Polygon({-lp,-lp,0},
{ lp,-lp,0},
{ lp, lp,0},
{-lp, lp,0})Hlegs = 5
gamba1 = Parallelepiped({-(lp-1),-(lp-1),0},{.7,.7,Hlegs})
Relica = .7
elica1 = ParametricCurve(“t”,”-5.65+”..Relica..”*math.cos(2*math.pi*t)”,
“-5.65+0.7*math.sin(2*math.pi*t)”,
“5*t/(2*math.pi)”,
0,
2*math.pi,
150)gamba2 = translate(gamba1,{11,0,0})
gamba3 = translate(gamba1,{11,11,0})
gamba4 = translate(gamba1,{0,11,0})
tavola = Parallelepiped({-6.5,-6.5,Hlegs},{13,13,.5})base_vaso = Arc(.25,{1,2,5.5},360,10)
vaso = Cylinder(base_vaso.points,{0,0,1},1)ellissoide = Ellipsoid(1.5,1,.5,{0,-4,6},20,5)
ellissoide = rotate(ellissoide,{0,-4,6},{0,0,1},30)sfera = Sphere(.5,{0,4,6},20,5)
sfera = rotate(sfera,{0,4,6},{1,1,0},30)scena = CreateScene(“pavimento”,
“gamba1″,”gamba2″,”gamba3″,”gamba4”,
“tavola”,”sfera”,”ellissoide”,”vaso”)PrintTikZ(eye,look_at,theta,scena)
}
\end{tikzpicture}
\end{document}`ottengo:
La differenza rispetto a prima è il fatto che non vengono stampati i poligoni le cui normali non sono rivolte verso l’osservatore.
L’obbiettivo ora è di stampare gli oggetti in modo ordinato in modo da nascondere le zone nascoste da oggetti che si trovano più vicino all’osservatore.
Successivamente vorrei aggiungere l’opzione della prospettiva.
Domanda: c’è un modo per tenere le variabili che si creano solamente dentro un \directlua senza renderle globali?
Saluti
Michele
::
Ciao, scusate se mi intrometto ma, per esercizio, voglio provare a leggere la macro che ha fornito egreg9.Allora:
La macro \fmtfirsttoken passa due dei tre input della macro \@fmtfirsttoken e nello specifico lo stile della prima parola(#1) ed il testo della frase da cui essa viene presa(#2) in modo tale che sia espansa prima la seconda(#2) e la terza(#3).
Quindi definito \mytext come nell’esempio, scrivere
`\fmtfirsttoken{\bfseries}{\mytext}`
è come scrivere
`@fmtfirsttoken{\bfseries}{This has to be tested}{}`
giusto?Se si, non ho capito quale parte del codice che non ho ancora descritto permette di prendere la prima parola, visto che le variabili #1 e #2 stanno entrambi dentro le graffe.
Saluti
Michele
::
Da grande utilizzatore di TikZ, se la classe che utilizzi prevede l’ambiente titlepage, ti consiglierei di fare qualcosa del genere:`\begin{titlepage}
\begin{tikzpicture}[remember picture,overlay]
\node[inner sep=0pt] (copertina) at (current page.center){\includegraphics{}}; % Altri nodi dove posizionare il titolo del tuo scritto
\end{tikzpicture}
\end{titlepage}`Per maggiori dettagli, leggi pag.203 del manuale pgfmanual(texdoc pgfmanual )
Saluti
Michele
3 Giugno 2011 alle 17:50 in risposta a: Lua: funzioni con input una variabile di tipo struttura #596363 Giugno 2011 alle 16:52 in risposta a: Lua: funzioni con input una variabile di tipo struttura #59634::
Probabilmente mi perdo qualcosa….Se compilo questo esempio minimo:
`
% !TEX program = LuaLaTeX
\documentclass{report}
\begin{document}
\directlua{
A = {vertex = {{1,2,3},
{1,2,3},
{1,2,3},
{1,2,3},
{1,2,3}}}tex.print(#A)
tex.print(#A.vertex)
tex.print(#A.vertex[1])
}
\end{document}`ottengo il seguente errore:
`! LuaTeX error <\directlua >:1: attempt to get length of a number value
stack traceback:
<\directlua >:1: in main chunk.`Scrivo qualcosa di sbagliato?
3 Giugno 2011 alle 10:27 in risposta a: Lua: funzioni con input una variabile di tipo struttura #59632::
Grazie Robitex, era un errore cretino che non mi sono accorto di fare……Ti faccio notare che getn() è un metodo deprecato. Per trovare la lunghezza della tabella usa l’operatore # .
Per quanto rigurda getn(), lo uso perché se uso # mi trovo con questo errore:
`! LuaTeX error <\directlua >:1: attempt to get length of a number value
stack traceback:
<\directlua >:1: in function 'ProjectionOfPointOnObserverSystem'
<\directlua >:1: in main chunk.`Saluti
Michele
-
AutoreRisposte

