- Questo topic ha 18 risposte, 3 partecipanti ed è stato aggiornato l'ultima volta 13 anni, 5 mesi fa da
lorenzo.pantieri.
-
CreatoreTopic
-
27 Febbraio 2013 alle 15:34 #83226
-
CreatoreTopic
-
AutoreRisposte
-
-
27 Febbraio 2013 alle 15:53 #83227::
Ciao,un modo potrebbe essere:
`\begin{tikzpicture}[scale=1]
% definizioni
\def\lato{5}
\pgfmathsetmacro{\raggio}{\lato/3.5}
\def\alpha{60}% coordinate
\coordinate [label=270:{ALIMENTAZIONE}] (bs) at (0,0); %punto in basso a sinistra del triangolo
\coordinate [label=270:{RIPOSO}](bd) at ($(bs)+(0:\lato)$); %punto in basso a sinistra del triangolo
\coordinate [label=90:{ALLENAMENTO}] (a) at ($(bs)+(\alpha:\lato)$); %punto in basso a sinistra del triangolo% triangolo
\draw (bs) — (bd) — (a) — cycle;% centro
\path [name path=lineaUno] (bs) — ($(bs)+(\alpha/2:\lato)$);
\path [name path=lineaDue] (bd) — ($(bd)+(180-\alpha/2:\lato)$);
\path [name intersections={of=lineaUno and lineaDue, by=centro}];
\fill [blue!75] (centro) circle (\raggio cm);
\node at (centro) {RISULTATI};\end{tikzpicture}`
Oltre, ovviamente, al testo e ai colori, puoi modificare le dimensioni del disegno o attraverso il valore di [tt]scale[/tt] oppure modificando la dimensione del [tt]\lato[/tt]. Tutto viene scalato di conseguenza.
Devi caricare anche le seguenti librerie di [tt]TikZ:[/tt]
` \usetikzlibrary{automata}
\usetikzlibrary{arrows}
\usetikzlibrary{backgrounds}
\usetikzlibrary{calc}
\usetikzlibrary{hobby}
\usetikzlibrary{intersections}
\usetikzlibrary{patterns}
\usetikzlibrary{positioning}
\usetikzlibrary{shadows}
\usetikzlibrary{shapes}
\usetikzlibrary{through}`
Alcune forse non sono necessarie, ma di preciso adesso non saprei dirti.Ciao,
Marco.P.S. Il valore di [tt]3.5[/tt] usato per il calcolo del raggio l’ho scelto “a occhio”. Puoi calcolarti il valore esatto per avere la tangenza del cerchio ai lati del triangolo (se è quello che vuoi, perché nel tuo disegno non mi sembra che sia così), oppure si potrebbe usare una macro di misura della distanza fra due punti (se ho tempo stasera ti mostro come fare).
-
27 Febbraio 2013 alle 16:10 #83228::
Ciao,ecco la soluzione con misura della distanza. Nel preambolo inserisci questa macro:
`%Distanza fra due punti (la lunghezza viene espressa in punti, quindi usare \calcLV pt)
\makeatletter
\def\calcLV(#1,#2)#3{%
\pgfpointdiff{\pgfpointanchor{#1}{center}}%
{\pgfpointanchor{#2}{center}}%
\pgf@xa=\pgf@x%
\pgf@ya=\pgf@y%
\FPeval\@temp@a{\pgfmath@tonumber{\pgf@xa}}%
\FPeval\@temp@b{\pgfmath@tonumber{\pgf@ya}}%
\FPeval\@temp@sum{(\@temp@a*\@temp@a+\@temp@b*\@temp@b)}%
\FProot{\FPMathLen}{\@temp@sum}{2}%
\FPround\FPMathLen\FPMathLen35\relax
\global\expandafter\edef\csname #3\endcsname{\FPMathLen}
}
\makeatother`
Fatto ciò, il disegno può essere fatto così:
`\begin{tikzpicture}[scale=1]
% definizioni
\def\lato{7} %pone il valore di lato a 7 (se non specificato è cm)
\pgfmathsetmacro{\raggio}{\lato/3.5} %calcola il valore del raggio a partire da quello del lato, ma può anche essere una costante
\def\alpha{60} %angolo tra i lati del triangolo% coordinate
\coordinate [label=270:{ALIMENTAZIONE}] (bs) at (0,0); %punto in basso a sinistra del triangolo, ed etichetta
\coordinate [label=270:{RIPOSO}](bd) at ($(bs)+(0:\lato)$); %punto in basso a sinistra del triangolo, ed etichetta
\coordinate [label=90:{ALLENAMENTO}] (a) at ($(bs)+(\alpha:\lato)$); %punto in basso a sinistra del triangolo, ed etichetta
\coordinate (intBsA) at ($(bs)!.5!(a)$); %punto mediano fra (bs) e (a)% centro
\path [name path=lineaUno] (bs) — ($(bs)+(\alpha/2:\lato)$); %definisce il percorso del segmento bisettore dell'angolo in basso a sinistra
\path [name path=lineaDue] (bd) — ($(bd)+(180-\alpha/2:\lato)$); %definisce il percorso del segmento bisettore dell'angolo in basso a destra
\path [name intersections={of=lineaUno and lineaDue, by=centro}]; %per intersezione determina il centro del triangolo% calcolo raggio
\calcLV(intBsA,centro){dist} %calcola la distanza fra il centro e il mediano fra (bs) e (a)% cerchio
\fill [blue!75] (centro) circle (\dist pt); %disegna il cerchio (si può anche usare shade, al posto di fill)
\node at (centro) {Risultati}; %etichetta del nodo al centro% triangolo
\draw (bs) — (bd) — (a) — cycle; %disegna il triangolo\end{tikzpicture}`
Tieni presente che la macro per il calcolo della misura della distanza fra due punti fornisce il risultato in pt, perciò nel raggio di [tt]circle[/tt] devi usare [tt]\dist pt.[/tt] A questo punto puoi scegliere se dare il valore manualmente attraverso [tt]\raggio,[/tt] oppure se farlo calcolare. L’ordine in cui disegni il cerchio e il triangolo è rilevante ai fini di ciò che viene disegnato “sotto” e ciò che viene disegnato “sopra”.Ciao,
Marco.
-
27 Febbraio 2013 alle 17:05 #83229::
Ciao,ancora una cosa, se vuoi la scritta “ALIMENTAZIONE” proprio dov’è nel disegno che hai riportato, sostituisci alla riga:
`\coordinate [label=270:{ALIMENTAZIONE}] (bs) at (0,0); %punto in basso a sinistra del triangolo, ed etichetta`la riga:
`\coordinate (bs) at (0,0) node [anchor=north west] {ALIMENTAZIONE}; %punto in basso a sinistra del triangolo, ed etichetta`Ciao,
Marco.
-
27 Febbraio 2013 alle 17:33 #83230::
Dunque, i procedimenti di Marco vanno benissimo (anche se puoi evitare cose come [tt]name path[/tt] che servono solo nelle intersezioni – che mi pare non usi nel primo tuo post, se ho letto bene e non mi è sfuggito qualcosa – e quelle miriadi di chiamate a libreria inutilizzate – solo [tt]calc[/tt] è necessaria – anche qui: a occhio).Però mi sembra che si possa fare molto più semplicemente così:`\begin{tikzpicture}
\fill[blue!50!cyan] (2,0) circle(1.1cm);
\node[regular polygon, regular polygon sides=3, draw] (triangolo) at (2,0) {Risultati};
\node[green!70!black,above] at (triangolo.corner 1){Allenamento};
\node[green!70!black,below] at (triangolo.corner 2){Alimentazione};
\node[green!70!black,below] at (triangolo.corner 3){Riposo};
\end{tikzpicture}` dove l’unica libreria richiesta è [tt]shapes.geometric[/tt].Poi, se si vuole proprio qualcosa di più raffinato, beh si può creare una sorta di interfaccia via chiavi:`
\pgfkeys{/tikz/.cd,
testo/.initial=text,
testo/.get=\tint,
testo/.store in=\tint,
larghezza triangolo/.initial=1.5,
larghezza triangolo/.store in=\trigl,
larghezza triangolo/.get=\trigl,
distanza labels/.initial=1cm,
distanza labels/.store in=\distlab,
distanza labels/.get=\distlab,
raggio cerchio/.initial=0.6cm,
raggio cerchio/.store in=\lenc,
raggio cerchio/.get=\lenc,
colore cerchio/.initial=blue!50!cyan,
colore cerchio/.store in=\colc,
colore cerchio/.get=\colc,
colore label/.initial=green!70!black,
colore label/.store in=\collab,
colore label/.get=\collab,
}\tikzset{aspetto triangolo/.style={
draw,
regular polygon,
regular polygon sides=3,
minimum size=\trigl cm,
name=trig,
path picture={
\fill[radius=\lenc,\colc](path picture bounding box.base)circle ;
}
},
}\pgfkeys{/tikz/triangolo con cerchio/.code={
\node[aspetto triangolo] (trig) {\tint};
\foreach \x[count=\xi] in {#1}{
\pgfmathparse{90.5+360*(\xi-1)/3}
\node at ($(trig)+(\pgfmathresult:\distlab)$)
[label={[font=\small,\collab]\pgfmathresult:\x}]{};
}
}
}
` da usarsi, nella versione base: `
\begin{tikzpicture}
\node[triangolo con cerchio={One,Two,Three}] {};
\end{tikzpicture}
` oppure, nell’esempio richiesto: `
\begin{tikzpicture}
\node[testo=Risultati,
raggio cerchio=1.1cm,
distanza labels=2.1cm,
triangolo con cerchio={Allenamento,Alimentazione,Riposo}] {};
\end{tikzpicture}
`Allego, per completezza un esempio compilabile subito: `
\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{calc,shapes.geometric}\pgfkeys{/tikz/.cd,
testo/.initial=text,
testo/.get=\tint,
testo/.store in=\tint,
larghezza triangolo/.initial=1.5,
larghezza triangolo/.store in=\trigl,
larghezza triangolo/.get=\trigl,
distanza labels/.initial=1cm,
distanza labels/.store in=\distlab,
distanza labels/.get=\distlab,
raggio cerchio/.initial=0.6cm,
raggio cerchio/.store in=\lenc,
raggio cerchio/.get=\lenc,
colore cerchio/.initial=blue!50!cyan,
colore cerchio/.store in=\colc,
colore cerchio/.get=\colc,
colore label/.initial=green!70!black,
colore label/.store in=\collab,
colore label/.get=\collab,
}\tikzset{aspetto triangolo/.style={
draw,
regular polygon,
regular polygon sides=3,
minimum size=\trigl cm,
name=trig,
path picture={
\fill[radius=\lenc,\colc](path picture bounding box.base)circle ;
}
},
}\pgfkeys{/tikz/triangolo con cerchio/.code={
\node[aspetto triangolo] (trig) {\tint};
\foreach \x[count=\xi] in {#1}{
\pgfmathparse{90.5+360*(\xi-1)/3}
\node at ($(trig)+(\pgfmathresult:\distlab)$)
[label={[font=\small,\collab]\pgfmathresult:\x}]{};
}
}
}\begin{document}
Esempio standard:
\begin{center}
\begin{tikzpicture}
\node[triangolo con cerchio={One,Two,Three}] {};
\end{tikzpicture}
\end{center}Esempio richiesto:
\begin{center}
\begin{tikzpicture}
\node[testo=Risultati,
raggio cerchio=1.1cm,
distanza labels=2.1cm,
triangolo con cerchio={Allenamento,Alimentazione,Riposo}] {};
\end{tikzpicture}
\end{center}Il metodo artigianale:
\begin{center}
\begin{tikzpicture}
\fill[blue!50!cyan] (2,0) circle(1.1cm);
\node[regular polygon, regular polygon sides=3, draw] (triangolo) at (2,0) {Risultati};
\node[green!70!black,above] at (triangolo.corner 1){Allenamento};
\node[green!70!black,below] at (triangolo.corner 2){Alimentazione};
\node[green!70!black,below] at (triangolo.corner 3){Riposo};
\end{tikzpicture}
\end{center}\end{document}
`Il risultato (dopo un cambio di browser):
[attachment=612]Senzanome_2013-02-27.jpg[/attachment]
Ciao
Claudio
Attachments:
You must be logged in to view attached files. -
27 Febbraio 2013 alle 21:03 #83231::
Ciao,ecco dove sta la differenza fra chi (più o meno) sa ottenere quello che desidera e chi sa fare le cose in generale. Io ho imparato (lo so, è una parola grossa…) a usare [tt]TikZ[/tt] avendo via via in mente cosa volevo fare e quindi cercando un modo semplice che lo risolvesse. Così facendo, però, ancora non conosco metodi molto più efficaci e raffinati che invece Claudio conosce. Questo mostra che la grande differenza fra chi è esperto di [tt]TikZ[/tt] e chi non lo è, spesso non sta nel risultato in sé, ma nel modo impiegato per raggiungerlo. Questo per dire cosa? Per dire che, a meno che non si abbia disegni concettualmente molto impegnativi, [tt]TikZ[/tt] non è così inaccessibile; solo, spesso, il risultato verrà raggiunto in maniera meno efficiente.
Dopo queste riflessioni ringrazio moltissimo Claudio, che ancora una volta mi ha insegnato qualcosa di [tt]TikZ.[/tt] Buona notte a tutti,
Marco.
-
28 Febbraio 2013 alle 5:13 #83232::
`\begin{tikzpicture}
\fill[blue!50!cyan] (2,0) circle(1.1cm);
\node[regular polygon, regular polygon sides=3, draw] (triangolo) at (2,0) {Risultati};
\node[green!70!black,above] at (triangolo.corner 1){Allenamento};
\node[green!70!black,below] at (triangolo.corner 2){Alimentazione};
\node[green!70!black,below] at (triangolo.corner 3){Riposo};
\end{tikzpicture}`Davvero notevole, anche come eleganza nel codice.
Grazie mille, Claudio e Marco! 🙂
-
28 Febbraio 2013 alle 6:28 #83233::
Ciao Claudio,avrei qualche domanda riguardo al tuo codice:
cfiandra`\begin{tikzpicture}
\fill[blue!50!cyan] (2,0) circle(1.1cm);
\node[regular polygon, regular polygon sides=3, draw] (triangolo) at (2,0) {Risultati};
\node[green!70!black,above] at (triangolo.corner 1){Allenamento};
\node[green!70!black,below] at (triangolo.corner 2){Alimentazione};
\node[green!70!black,below] at (triangolo.corner 3){Riposo};
\end{tikzpicture}`- Il cerchio, nel tuo disegno, è tangente ai lati del triangolo. Ho provato a riprodurlo, e questo a me non avviene. Come mai?
- In questo codice, senza usare le chiavi, come posso soddisfare la richiesta di tangenza? Fissata questa, come posso decidere la lunghezza del lato del triangolo?
- Dove hai imparato a usare le chiavi di [tt]TikZ?[/tt] Semplicemente studiandoti la parte relativa sulla sua documentazione?
Grazie infinite e buona giornata,
Marco.
-
28 Febbraio 2013 alle 10:39 #83234::
Marco87″ post=82591Ciao Claudio,
avrei qualche domanda riguardo al tuo codice:
`\begin{tikzpicture}
\fill[blue!50!cyan] (2,0) circle(1.1cm);
\node[regular polygon, regular polygon sides=3, draw] (triangolo) at (2,0) {Risultati};
\node[green!70!black,above] at (triangolo.corner 1){Allenamento};
\node[green!70!black,below] at (triangolo.corner 2){Alimentazione};
\node[green!70!black,below] at (triangolo.corner 3){Riposo};
\end{tikzpicture}`[ol]
[li]Il cerchio, nel tuo disegno, è tangente ai lati del triangolo. Ho provato a riprodurlo, e questo a me non avviene. Come mai?[/li]
[li]In questo codice, senza usare le chiavi, come posso soddisfare la richiesta di tangenza? Fissata questa, come posso decidere la lunghezza del lato del triangolo?[/li]
[li]Dove hai imparato a usare le chiavi di [tt]TikZ?[/tt] Semplicemente studiandoti la parte relativa sulla sua documentazione?[/li]
[/ol]Grazie infinite e buona giornata,
Marco.In effetti hai ragione, non c’è tangenza, ma per scoprirlo ho dovuto ingrandire di non poco l’immagine:
[attachment=613]marco.jpg[/attachment]
A dimensioni normali non ci si accorge del piccolo errore. Direi che il raggio giusto era [tt]1.105[/tt], quindi: `
\fill[blue!50!cyan] (2,0) circle(1.105cm);
` Fra le altre cose, si può anche scrivere: `
\fill[blue!50!cyan, radius=1.105cm] (2,0) circle ;
` Ora mi dirai: “Si, ma non ci sono soluzioni che non prevedano di andare a naso nel decidere le dimensioni?”. Premetto che io sono sempre propenso al “trial & error approach” in casi del genere perché anche se non producono il risulato perfetto, producono qualcosa di molto simile, senza andare ad imbarcarsi in soluzioni complicate. Infatti, se vuoi avere qualcosa di tangente devi poter calcolare come minimo l’ampiezza (orizzontale) del triangolo nel punto mediano (in termini verticali) dove c’è il testo interno. Non che non si possa fare, tu conosci il codice di Alain per fare calcoli di questo tipo (nel pacchetto smartdiagram ho creato qualcosa di simile senza però ricorrere ad fp, cerca [tt]\CalcHeight[/tt]), ma bisogna chiedersi quanto il procedimento complica il codice. Sicuramente non poco se vuoi una soluzione completamente automatica, in grado di disegnarti il triangolo con il testo e mettere il cerchio delle esatte dimensioni. Altrimenti, una soluzione semiautomatica segue la falsa riga del seguente pseudocodice: `
disegno il triangolo con il testo;
calcolo l'ampiezza x;
disegno il cerchio nella stessa coordinata del triangolo con ampiezza x;
` Questo però pressuppone che l’utente conosca quelle funzioni di calcolo e che sappia come reperire le ancore giuste del triangolo (o calcolarsele). Nota anche una cosa: non si può prescindere da questo tipo di calcolo basandosi solo, per esempio sul valore di [tt]minimum size[/tt] del triangolo perché chiaramente non tiene conto della dimensione effettiva del triangolo che sarà basata su: lunghezza testo+inner sep.Per tutti questi motivi, secondo me, un utente che conosca bene le basi di TikZ fa decisamente prima con un paio di prove sul raggio. Se sei un utente esperto di TikZ hai altre soluzioni, tutte non banali:
1) creare una nuova shape triangolo equilatero con cerchio all’interno (forse sarebbe la migliore perché avresti in automatico tangenza senza calcoli, ma devi definirla bene);
2) usare una postaction/append after command per creare a partire da una delle ancore mediane del triangolo due archi, uno da 180 a 0 (o il contrario, da 0 a 180) e uno da 180 a 360 (vale sempre il contrario) diretti verso l’ancora opposta.La 3), quella che ho usato io, è lasciare all’utente il compito di calcolarsi tutto con le chiavi: in automatico infatti appare il cerchio dentro il triangolo, ma il raggio di default è adattato per il testo fittizio [tt]text[/tt]. L’utente con la chiave [tt]raggio cerchio[/tt] farà un paio di prove per sistemarlo. Una 4), ipotetica (mi è venuta in mente ora), è fare un fit del triangolo con un nodo circle: potrebbe funzionare.
Per quanto riguarda l’uso delle chiavi, no la documentazione non mi è bastata. Anzi, non sono partito proprio da lì perché è tutta teoria, ma dal codice di TikZ-uml dove ho potuto vedere in pratica il funzionamento. In quel periodo avevo applicato quel poco che sapevo alla prima bozza di Sa-TikZ con diversi errori: mi sono letto con calma la documentazione e ho guardato qualche esempio su TeX.SX (vedi il tag pgfkeys), ma devo dire che al momento so solo applicare 4 o 5 cose. La potenzialità è molto più grande…
Ciao
Claudio
Attachments:
You must be logged in to view attached files. -
28 Febbraio 2013 alle 12:08 #83235
-
2 Marzo 2013 alle 8:35 #83236::
Marco87″ post=82606Ciao Claudio,
ti ringrazio molto delle spiegazioni e delle indicazioni che mi hai fornito. Nel tuo messaggio ci sono cose che non conosco (shape, postaction, fit, …) e che mi daranno spunto per imparare qualcosa di nuovo e utile.
Grazie ancora e ciao, 🙂
Marco.Figurati 🙂
Con [tt]shape[/tt] intendevo realizzare una nuova forma (come ha fatto Francesco con la sua libreria di meccanica): è sicuramente il metodo migliore, non facile per nulla ma permetterebbe di scrivere qualcosa come: `
\node[triangolo con cerchio, fill cerchio=blue!50!cyan] () at ( , ) {Testo};
` e automaticamente il cerchio sarebbe sempre tangente al triangolo al di là delle dimensioni del testo: nessun calcolo.[tt]Postaction[/tt] oppure [tt]append after command[/tt] sono comandi che permettono di disegnare nuovamente qualcosa su un path già esistente (in termini spicci). Anche [tt]path picture[/tt] può rientrare nella categoria.
[tt]Fit[/tt] (comando) viene caricato dalla omoninma libreria e 9/10 è usato per fare il riempimento di un nodo con uno sfondo. In termini di sintassi, fit va inserito all’interno di un altro nodo perciò se ne può trovare un utilizzo un po’ più smart: tante volte, creando degli stili con le chiavi precedentemente indicate [tt]Postaction[/tt], [tt]append after command[/tt] e simili, si arriva ad un punto per cui non si riesce più ad accedere al nodo di partenza per fare qualche operazione; il trucco sta nel creare un nuovo nodo che riempa ([tt]fit[/tt]s) il precedente: si riesce ad accedere al nome del nuovo nodo perché è localmente definito e in realtà si stanno compiendo operazioni su quello vecchio.
Ciao
Claudio
-
4 Marzo 2013 alle 17:16 #83237
-
11 Marzo 2013 alle 14:03 #83238::
`\begin{tikzpicture}
\draw [fill=cyan!20] (0,0) circle(1);
\draw (-1.732, -1) node [below left] {allenamento} —
(1.732, -1) node [below right] {riposo} —
(0, 2) node [above] {alimentazione} — cycle;
\end{tikzpicture}`
Che ne dite, ragazzi? 😉Codice compatto, semplice e che non richiede librerie extra.
Studio TikZ da neanche un giorno, e già mi piace… 🙂
-
11 Marzo 2013 alle 16:43 #83239::
lorenzo.pantieri” post=82859`\begin{tikzpicture}
\draw [fill=cyan!20] (0,0) circle(1);
\draw (-1.732, -1) node [below left] {allenamento} —
(1.732, -1) node [below right] {riposo} —
(0, 2) node [above] {alimentazione} — cycle;
\end{tikzpicture}`
Che ne dite, ragazzi? 😉Codice compatto, semplice e che non richiede librerie extra.
Studio TikZ da neanche un giorno, e già mi piace… 🙂
Ottimo 🙂 Nota che con TikZ non esiste una strada, ma si possono usare diversi stili. Ho notato, ad esempio, che Marco e Francesco generalmente prima definiscono le posizioni dei nodi prima attraverso il comando [tt]\coordinate[/tt]: `
\coordinate at (0,0) (origine);
\node[opzioni] (label) at (origine) {Testo};
` Io, invece, preferisco avere singoli nodi: `
\node[opzioni] (label) at (0,0) {Testo};
` Ma si può anche fare come hai fatto tu, ossia inserendo i nodi direttamente mentre si disegna il triangolo.Ciao
Claudio
-
12 Marzo 2013 alle 7:39 #83240::
Ciao,cfiandraHo notato, ad esempio, che Marco e Francesco generalmente prima definiscono le posizioni dei nodi prima attraverso il comando [tt]\coordinate:[/tt]
Vero, nei miei disegni l’ordine è: “definizioni e macro” (attraverso l’uso di [tt]\def[/tt] e [tt]\pgfmathsetmacro[/tt]), “coordinate” e quindi il disegno vero e proprio. In questo modo se durante lo svolgimento del disegno devo inserire (per via dell’ordine di visualizzazione) una parte prima di un’altra, e fare riferimento a una data coordinata, sono sicuro che sia già stata definita. Riconosco che questa ragione sia piuttosto opinabile… (Traduco: se qualcuno vuole fare una critica a questo metodo e propormi un approccio migliore, sarà molto ben accetto. :))
lorenzo.pantieriChe ne dite, ragazzi? 😉
Codice compatto, semplice e che non richiede librerie extra.
Come diceva Claudio in [tt]TikZ[/tt] le strade per raggiungere uno stesso obiettivo sono diverse, come del resto hai potuto vedere con i disegni di cui hai chiesto. Il tuo approccio ha il vantaggio di avere un codice semplice a vedersi e a capirsi.
lorenzo.pantieriStudio TikZ da neanche un giorno, e già mi piace… 🙂
Questa è una cosa molto bella per te, per i tuoi documenti e… anche per i lettori delle tue guide, se deciderai effettivamente di fare un capitolo sull’Arte che riguardi questo potentissimo strumento di disegno.
Buono studio e soprattutto buon divertimento!
Marco.
-
13 Marzo 2013 alle 13:29 #83241::
Marco87″ post=82872Il tuo approccio ha il vantaggio di avere un codice semplice a vedersi e a capirsi.
Il che non è poco. 😉
Ecco un’altra versione del codice:
`\begin{tikzpicture}
\coordinate (origine) at (0, 0);
\coordinate (c1) at (-1.732,-1) ;
\coordinate (c2) at (1.732, -1);
\coordinate (c3) at (0, 2);\node at (c1) [below left] {$c_1$};
\node at (c2) [below right] {$c_2$};
\node at (c3) [above] {$c_3$};\draw [help lines] (-2,-2) grid (2,2);
\draw [fill=yellow] (origine) circle(1);
\draw (c1) — (c2) — (c3) — cycle;
\end{tikzpicture}`
È meno semplice dell’altra che ho proposto, ma così il codice è più facile da “mantenere”.Marco87″ post=82872
Questa è una cosa molto bella per te, per i tuoi documenti e… anche per i lettori delle tue guide, se deciderai effettivamente di fare un capitolo sull’Arte che riguardi questo potentissimo strumento di disegno.Buono studio e soprattutto buon divertimento!
Ben detto: è un divertimento! 🙂
-
17 Marzo 2013 alle 17:16 #83242
-
18 Marzo 2013 alle 10:01 #83243::
Ciao,un aspetto (fra i molteplici) che apprezzo molto dei disegni fatti con [tt]TikZ[/tt] è che, se li realizzo parametrici, posso modificarli (come mi capita non raramente) semplicemente modificando uno o alcuni parametri. Questo è un vantaggio che ovviamente fa perdere un po’ in termini di semplicità e immediatezza della comprensione del codice impiegato. Tuttavia riscontro che con l’uso anche questo scoglio viene notevolmente ridotto, e poi mi premuro sempre di seguire sempre lo stesso metodo nei disegni che faccio e di commentare il codice in modo che anche se dovessi riprendere in mano un disegno dopo parecchio tempo, saprei orientarmi senza grandi difficoltà. Tutto dipende dalle proprie priorità; anche se apprezzo i vantaggi dei diversi approcci, nei miei disegni preferisco avere un grado di “automatizzazione” maggiore (anche se, come sempre, il mio punto di vista è del tutto opinabile).
Complimenti per i risultati che via via stai ottenendo, 🙂
Marco.
-
18 Marzo 2013 alle 14:30 #83244::
Marco87″ post=83121Ciao,
un aspetto (fra i molteplici) che apprezzo molto dei disegni fatti con [tt]TikZ[/tt] è che, se li realizzo parametrici, posso modificarli (come mi capita non raramente) semplicemente modificando uno o alcuni parametri. Questo è un vantaggio che ovviamente fa perdere un po’ in termini di semplicità e immediatezza della comprensione del codice impiegato. Tuttavia riscontro che con l’uso anche questo scoglio viene notevolmente ridotto, e poi mi premuro sempre di seguire sempre lo stesso metodo nei disegni che faccio e di commentare il codice in modo che anche se dovessi riprendere in mano un disegno dopo parecchio tempo, saprei orientarmi senza grandi difficoltà. Tutto dipende dalle proprie priorità; anche se apprezzo i vantaggi dei diversi approcci, nei miei disegni preferisco avere un grado di “automatizzazione” maggiore (anche se, come sempre, il mio punto di vista è del tutto opinabile).
Complimenti per i risultati che via via stai ottenendo, 🙂
Grazie mille, sono appena agli inizi! 🙂
Vero, l’uso delle coordinate permette una maggiore modificabilità del disegno, pagando un piccolo prezzo in termini di immediatezza del codice. Ecco la versione più “astratta” del disegno.
`\begin{tikzpicture}
\draw [help lines] (-2,-1) grid (2,2);
\coordinate (o) at (0, 0);
\coordinate (c1) at ({-sqrt(3)},-1);
\coordinate (c2) at ({sqrt(3)},-1);
\coordinate (c3) at (0, 2);\draw [fill=cyan!20] (o) circle (1);
\draw (c1) node [below left] {$c_1$}
— (c2) node [below right] {$c_2$}
— (c3) node [above] {$c_3$}
— cycle;
\end{tikzpicture}
`
-
-
AutoreRisposte
- Devi essere connesso per rispondere a questo topic.
