Risposte nei forum create
-
AutoreRisposte
-
::
Ivan ha ragione a dire che non fa diagrammi 3D, non parché non si possano fare, ma perché è difficilissimo farli senza interfaccia adatta.
Il problema, secondo me, è la mancanza del rendering dell’immagine 3D.
Qualcosa si sta muovendo appunto con la CVS di PGFplots e con Sketch i quali disegnano per primi i poligoni più lontani dalll’osservatore, disegnandoci sopra quelli più vicini.
Purtroppo lo svantaggio di geometrie più complesse è la visibilità dei lati dei poligoni che compongono il modello. Si può ovviare a questo come fa De Marco nelle sue figure, ma comunque, anche se ottime, si ha un senso di piattezza che non si avrebbe se il sistema di rendering riconoscesse i bordi da disegnare.
Ho provato a cercare qualcosa a riguardo, ma ho scoperto che ci fanno dei corsi interi all’università, quindi è una materia che non si può imparare velocemente.
La cosa bellissima(la butto tanto per…) sarebbe fare qualcosa con LuaTeX: immaginate di scrivere una scena 3D dentro un ambiente e lui te la renderizza e te la disegna come fa il programma Sketch.
Saluti
Michele
::
Ciao,io, per la mia esperienza, consiglio TikZ per fare tutta la grafica 2D, in quanto con questo strumento è impossibile fare del 3D a meno che non si usino programmi esterni come Sketch che generano codice TikZ di una scena 3D.
Per quanto riguarda la conoscenza di TikZ, certo è impossibile ricordarsi tutti i comandi. Bisogna invece sapere cosa è capace di fare, perché una volta che si ha una soluzione per ottenere un determinato disegno, basta cercare i comandi sull’ottimo manuale.
Inoltre stanno incominciando a nascere diversi pacchetti basati su PGF/TikZ. L’autore più prolifico è comunque il francese Alain Matthes, raggiunbile qui.
Questo è quello che ho da dire.
Saluti
Michele
::
Ciao,hai chiesto una cosa che è tutto tranne che banale. Hai due strade:
La prima è aiutarti con il pacchetto tkz-3dplot. In questo caso il codice che propongo è il seguente
`
\documentclass{standalone}\usepackage{tikz}
\usetikzlibrary{calc,intersections}\usepackage{tikz-3dplot}
\begin{document}
\centering\def\radius{5}
\def\h{3}
\pgfmathsetmacro{\AC}{sqrt(\radius^2-\h^2)}
\pgfmathsetmacro{\angleChord}{acos(\h/\radius)}
\begin{tikzpicture}
% circle
\coordinate (O) at (0,0);
\draw[thick,name path=circle] (O) circle[radius=\radius];% Chord
\path[name path=rough_chord] ($(O)+(\radius,-\h)$)–($(O)-(\radius,\h)$);
\path[name intersections={of=circle and rough_chord}];
\coordinate (A) at (intersection-1);
\coordinate (B) at (intersection-2);
\draw (A)node{$A$}–(B)node
{$B$};
% High
\coordinate (C) at ($(A)!(O)!(B)$);
\draw[dashed](O)–(C)node[midway,right]{$h$};% draw center
\fill (O)circle(.5mm)node[above]{$O$};% draw angle
\draw[dashed](A)–(O)–(B);
\draw[<->]($(O)-(0,\h/2)$)arc[radius = \h/2,
start angle = 270,
delta angle = -\angleChord];
\node[below] (theta) at ($(O)+({-90-\angleChord/2}:\h/2)$){$\theta$};
\end{tikzpicture}\vskip 2cm
\tdplotsetmaincoords{70}{30}
\begin{tikzpicture}[tdplot_main_coords]
\def\MetaLunghezza{3}% ARCS
%->1
\tdplotsetrotatedcoords{0}{90}{-90}
\coordinate (Shift) at (\MetaLunghezza,0,0);
\tdplotsetrotatedcoordsorigin{(Shift)}
\tdplotdrawarc[tdplot_rotated_coords,]{(0,0,0)}{\radius}{90-\angleChord}{90+\angleChord}{}{}%->2
\def\ang{65}
\coordinate (Shift) at (-\MetaLunghezza,0,0);
\tdplotsetrotatedcoordsorigin{(Shift)}
\tdplotdrawarc[tdplot_rotated_coords,]{(0,0,0)}{\radius}{90-\angleChord}{\ang}{}{}% plane cut
\draw[dashed] (-\MetaLunghezza,0,0)–(\MetaLunghezza,0,0);
\draw[fill=white](-\MetaLunghezza,-\AC,-\h)–
(-\MetaLunghezza,\AC,-\h)–
(\MetaLunghezza,\AC,-\h)–
(\MetaLunghezza,-\AC,-\h)–
cycle;% connecting line
\pgfmathsetmacro{\pointX}{-\MetaLunghezza}
\pgfmathsetmacro{\pointY}{-\radius*cos(\ang)}
\pgfmathsetmacro{\pointZ}{-\radius*sin(\ang)}
\coordinate (point) at (\pointX,\pointY,\pointZ);
\draw(point)–++(2*\MetaLunghezza,0,0);\end{tikzpicture}
\end{document}
`che da il seguente risultato(clicca sull’immagine per ingrandire):

Hai quattro parametri con cui giocare:
1. \radius
2. \h distaza della corda dal centro dlla sezione circolare
3. \MetaLunghezza della trav
4. \ang angolo che serve per disegnae bene la retta inferiore che unisce le sue curve in prospettivaLa seconda soluzione è affidarti al programma Sketch raggiungibile qui
Nellaa seconda non dovresti usare il trucchetto che ho usato con il parametro \ang, ma dovresti dare ad ogni faccia del cilindro un colore diverso.
Spero di esserti stato di aiuto.
Michele
P.S. Il disegno ti serve nell’ambito della teoria delle travi, in particolare per la formula di Jourawski per determinare il taglio?
::
Ciao,ecco la soluzione che ho trovato
`
%%%%%%%%%%%%%%%%
% FLOAT FIGURE %
%%%%%%%%%%%%%%%%
%\def\StarTrekFontScreen{\setromanfont{SWISS 911 UCm BT}}\newlength\@figureWidth
%\show\fnum@figure\newlength\@captionHeight
%\show\@captionHeight\newenvironment*{tikzgraphic}[5]{%
% #1 = h t p oppure b
% #2 = total picture width(cm)
% #3 = picture name
% #4 = caption
% #5 = label
\@float{figure}[#1]
\centering
\def\@CAP{#4}
\def\@LAB{#5}\begin{tikzpicture}[remember picture]
\def\@Ydist{1.5ex}
\def\@Xdist{1ex}
\def\@YH{5ex}
\def\@topHeight{.4cm}
\def\@bigRadius{.5cm}
\def\@smallRadius{.1cm}\pgfmathsetlength{\@figureWidth}{(#2-(2*(\@Xdist+\@YH)))}
\node[inner sep=-\pgflinewidth/2] (figure) at (0,0){\includegraphics[width=\@figureWidth]{#3}};\advance \c@figure by 1
\node[minimum width = \@figureWidth,
anchor = north west,
fill = \mycolor,
draw = \mycolor,
inner xsep = 1ex,
inner ysep = 1ex] (caption) at ($(figure.south west)+(0,-\@Ydist)$)
{\begin{minipage}{\@figureWidth-2ex}
{\StarTrekFontScreen\Large \fnum@figure}{\normalsize #4}
\end{minipage}};\getheightofnode{\@captionHeight}{caption}
\node[anchor = south,
minimum width = \@figureWidth,
minimum height = \@topHeight,
fill = \mycolor,
draw = \mycolor] (top) at ($(figure.north)+(0,\@Ydist)$){};\foreach \sign/\loc in {+/east,-/west}{
\coordinate (E\loc) at ($(caption.south \loc)+(\sign\@Xdist,0)$);
\coordinate (F\loc) at ($(E\loc)+(0,\@captionHeight)$);
\coordinate (H\loc) at ($(top.north \loc)+(\sign\@Xdist,0)$);
\coordinate (G\loc) at ($(top.south \loc)+(\sign\@Xdist,0)$);
\fill[HEAD] (E\loc)arc[radius=\@bigRadius,start angle=-90,delta angle=\sign90]–
($(H\loc)+(\sign\@bigRadius,-\@bigRadius)$)
arc[radius=\@bigRadius,start angle={90-\sign 90},delta angle=\sign90]–
(G\loc)
arc[radius=\@smallRadius,start angle=90,delta angle=-\sign90]–
($(F\loc)+(\sign\@smallRadius,\@smallRadius)$)
arc[radius=\@smallRadius,start angle={90-\sign 90},delta angle=-\sign90]–
cycle;}
}{\end{tikzpicture}
\caption{\@CAP}\label{\@LAB}\end@float}%%%%%%%%%%%
% CAPTION %
%%%%%%%%%%%
\long\def\@makecaption#1#2{%
\advance \c@figure by -1
}
`Codice da far girare con XeLaTeX o LuaLaTeX oppure togiere la riga in cui si definisce un font che ho installato sul mio OS.
L’idea è questa…
Praticamente ho imbrogliato il comando caption perché scrivo la didascalia come nodo nell’ambiente tikzpicture dove nelle righe precedendi faccio avanzare il counter \c@figure
per mettere il numero giusto(altrimenti LaTeX stamperebbe tutti i numeri meno uno).Il comando \@makecaption invece lo svuoto completamente, lasciando comunque due input, e lo sostituisco con una sottrazione di uno del counter \c@figure.
Il risultato si può vedere qui sotto

Che ne dite? avreste affrontato il problema in modo diverso?
Ora l’ulteriore passo è adattare il tutto, magari creando ambienti apposta, a tabelle, figure create con tikz e pgfplots e la cosa più difficile(immagino) adattarlo a delle subfigure create con il pacchetto subfig.
Michele
::
Ho trovato il font “incriminato” sul sito http://www.dafont.com grazie riconoscitore di font messo a disposizione.Purtroppo è un font a pagamento di nome Trajan Regular e costa 35$
Saluti
Michele
::
Bella questa applicazione.Purtroppo spulciando il sito si capisce che il font che mi interessa sapere è usato in delle scritte salvate in file .gif quindi il programma immagino che non funzioni.
Che il sito indicato usasse il font Times New Roman me ne ero accorto spulciando il sorgente del sito.
Grazie comunque….
La domanda rimane ancora aperta
Michele
::
Si è stato il mio primo tentativo, ecco il codice:`
\newlength\figureWidth
\newenvironment*{tikzgraphic}[4]{%
% #1 = total picture width(cm)
% #2 = picture name
\@float{figure}
\centering
\edef\CAP{#3}
\edef\LAB{#4}
\begin{tikzpicture}[remember picture]
\def\Ydist{1ex}
\def\Xdist{.5ex}
\def\YH{5ex}
\def\XH{\YH}
\def\TH{2ex}
\pgfmathsetmacro{\PictureWidth}{(#1-(2*(\Xdist+\YH)))*2.54/72}
\node[inner sep=-\pgflinewidth/2] (figure) at (0,0){\includegraphics[width=\PictureWidth cm]{#2}};
\edef\ddt{width=\PictureWidth cm}
%\show\ddt
\foreach \sign/\loc in {+/north,-/south}{
\coordinate (A\loc) at ($(figure.\loc)+(\PictureWidth/2,\sign\Ydist)$);
\coordinate (B\loc) at ($(A\loc)+(0,\sign\YH)$);
\coordinate (C\loc) at ($(B\loc)-(\PictureWidth,0)$);
\coordinate (D\loc) at ($(C\loc)+(0,-\sign\YH)$);
\fill[HEAD](A\loc)–(B\loc)–(C\loc)–(D\loc)–cycle;
}\foreach \sign/\loc in {+/east,-/west}{
\coordinate (E\loc) at ($(figure.south \loc)+(\sign\Xdist,-\Ydist)$);
\coordinate (F\loc) at ($(E\loc)+(0,-\YH)$);
\coordinate (G\loc) at ($(figure.north \loc)+(\sign\Xdist,\Ydist)$);
\coordinate (H\loc) at ($(G\loc)+(0,+\YH)$);
\fill[HEAD] (F\loc)arc[radius=\YH,start angle=-90,delta angle=\sign90]–
($(current bounding box.north \loc)-(0,\YH)$)
arc[radius=\YH,start angle={90-\sign 90},delta angle=\sign90]–
(G\loc)arc[radius={\YH-\TH},start angle=90,delta angle=-\sign90]–
($(current bounding box.south \loc)+(-\sign\TH,{2*\YH-\TH})$)
arc[radius={\YH-\TH},start angle={90-\sign 90},delta angle=-\sign90]–
cycle;
}}{\end{tikzpicture}\caption{\CAP}\label{\LAB}\end@float}
`L’intento è di inserire la caption all’interno del rettangolo inferiore, il quale avrà le seguenti dimensioni:
- – larghezza: larghezza testo se inferiore alla larghezza della figura, larghezzafigura se caption troppo lunga
- – altezza: pari al numero di righe in cui si divide il testo della caption
Dopo essere riuscito a disegnare la cornice intorno alla figura, mi sono reso conto che non sono buono a passare certi parametri al comando caption, quindi ora sto battendo la strada della modifica del comando \caption.
Consigli?
Michele
::
Cavoli, non mi ero accorto di aver risposto nello stesso istante in cui a risposto egreg9\A non è una lista di token della forma richiesta, lo è la sua espansione.
EnricoVorrei capire meglio la soluzione che ha dato Gregorio. Per questo avrei delle domandine:
-
1. Il fatto che nel mio codice mettessi \A significava che 1,1,1 era visto come un unico token?
2. La soluzione è quindi fare espandere \A(cioè creare una lista ed un numero di token) prima di \vectorDotI(e per questo l’uso combinato di \edef ed \noexpand)?
3. Passando al commando \vectorDotI, facendo rifarimento al codice da te suggerito e definendo prima \A e \B come faccio io, quando lo uso è come se scrivessi il codice di seguito?
`\begingroup\endgroup\vectorDotI(1,1,1)(1,1,1)`
4. Se si, \begingroup\endgroup serve per espandere solamente (#1)(#2) senza qualcosa precedente?Spero che le domande siano pertinenti e corrette.
Saluti
-
AutoreRisposte
