Help!!! Programma con Xy.pic

  • Creatore
    Topic
  • #85351
    Up
    0
    Down
    ::


    Ciao! Volevo sapere se qualcuno mi poteva aiutare a fare due programmi che ricreano i disegni in allegato. Ne ho davvero bisogno perchè è la prima volta che devo usare latex per ricreare immagini. Quello che ho saputo fare è semplicemente il poligono con il programma seguente:
    `
    \documentclass{article}
    \usepackage[all,knot,poly]{xy}
    \begin{document}

    \newcounter{node}
    \newcounter{node}
    \newcommand{\Letter}%
    {{\setcounter{node}%
    {\xypolynode}\Alph{node}}}
    \begin{xy} /r12mm/:
    (0,0), {\xypolygon10{~*{\xypolynode}}}
    \end{xy}
    \end{document}
    `
    Grazie mille davvero!!!

    [attachment=688]1.jpg[/attachment]

    [attachment=689]0023.jpg[/attachment]

    Attachments:
    You must be logged in to view attached files.
Visualizzazione 7 filoni di risposte
  • Autore
    Risposte
    • #85352
      Up
      0
      Down
      ::


      Benvenuta! 🙂

      Non è una risposta, ma penso che TikZ sia più indicato per quello che desideri. Attendiamo fiduciosi gli esperti di quel pacchetto.

      Ciao
      Enrico

    • #85353
      Up
      0
      Down
      ::


      Grazie. Mi avevano consigliato quel pacchetto ma assolutamente non mi cambia quale utilizzare!:)

    • #85354
      OldClaudio
      Partecipante
        Up
        0
        Down
        ::


        Quel pacchetto è un glorioso residuo del passato, sebbene, almeno la documentazione, sia stato aggiornato nel 2012. In realtà il suo scopo principale è il disegno di diagrammi commutativi; oggi poi è dotato di un backend xypdf che gli permette di eseguire i disegni anche quando si compila direttamente il file finale in formato PDF. quindi lo si può considerare anche un glorioso sopravvissuto e degno di essere usato anche oggi.

        Ma i disegni che vuoi fare esulano “un poco” dai diagrammi commutativi e il pacchetto TikZ è certamente più indicato. Solo che fra gli esperti del forum solo Cfiandra potrebbe aiutarti a occhi chiusi, senza nemmeno consultare il manuale di TikZ 🙂
        In questi giorni di feste infrasettimanali che invogliano ai ponti è possibile che cfiandra sia in vacanza, ma non gli sfugge un solo messaggio di aiuto che sia correlato con TikZ. 😉

      • #85355
        robitex
        Amministratore del forum
          Up
          0
          Down
          ::


          Ciao,
          un primo codice potrebbe essere il seguente:
          `\documentclass{standalone}
          \usepackage{tikz}

          \tikzstyle{item}=[fill,
          minimum size=4pt,
          inner sep = 0pt,
          circle]

          % raggio del cerchio
          \newdimen\r
          \r=24mm

          \begin{document}
          \begin{tikzpicture}

          \node[item, label=-60:{$[n-2]$}] (a) at (-60:\r) {};
          \node[item, label=-30:{$[n-1]$}] (b) at (-30:\r) {};
          \node[item, label= 0:{$[0]$}] (c) at (0:\r) {};
          \node[item, label= 30:{$[1]$}] (d) at (30:\r) {};
          \node[item, label= 60:{$[2]$}] (e) at (60:\r) {};
          \node[item, label= 90:{$[3]$}] (f) at (90:\r) {};
          \node[item, label=120:{$[4]$}] (g) at (120:\r) {};
          \node[item, label=150:{$[5]$}] (h) at (150:\r) {};

          \draw (a)–(b)–(c)–(d)–(e)–(f)–(g)–(h);
          \draw[dashed] (h) arc (150:300:\r);

          \end{tikzpicture}
          \end{document}
          `

          Per prima cosa creo un sorgente a parte che includerò nel sorgente principale con \includegraphics come immagine pdf.
          Per ritagliare la pagina alle dimensioni del disegno uso la classe standalone.
          Poi creo uno stile con il quale posso facilmente regolare l’aspetto dei nodi (dimensione colore forma ecc).
          Poi all’interno di un ambiente tikzpicture, disegno dei nodi assegnandogli lo stile ed un nome che mi servirà poi per collegarli con un segmento.
          La posizione dei nodi, viene definita in coordinate polari (:). Tra le opzioni dell’oggetto nodo sfrutto label per disegnare il testo in modalità matematica che è orientato dal nodo con lo stesso angolo.
          Infine, disegno i segmenti e la curva tratteggiata.
          Posso regolare in un attimo il raggio del cerchio su cui si trovano i nodi, variando il valore della dimensione \r.
          Trovo molto comodo l’opzione label, mentre, naturalmente, il codice può essere molto più elegante ma questo ha il ptregio di essere semplice e facile da comprendere.
          Consultare il manuale di TiKZ aprendo il pdf con il comando da console: texdoc tikz.
          My two cent…
          🙂
          R.

        • #85356
          robitex
          Amministratore del forum
            Up
            0
            Down
            ::


            Ecco, un codice un po’ più elegante potrebbe essere questo:
            `\documentclass{standalone}
            \usepackage{tikz}

            \tikzstyle{item}=[fill,
            minimum size=4pt,
            inner sep = 0pt,
            circle]

            % raggio del cerchio
            \newdimen\r
            \r=24mm

            \begin{document}
            \begin{tikzpicture}
            \foreach \name/\ang in {
            n-2/-60,
            n-1/-30,
            0/0,
            1/30,
            2/60,
            3/90,
            4/120,
            5/150
            } \node[item, label=\ang:{$[\name]$}] (\name) at (\ang:\r) {};

            \draw (n-2)–(n-1)–(0)–(1)–(2)–(3)–(4)–(5);
            \draw[dashed] (5) arc (150:300:\r);
            \end{tikzpicture}
            \end{document}
            `

            Faccio uso di un istruzione \foreach con due variabili: l’angolo e l’etichetta, che vanno specificati a coppie separando i valori con uno slash e le coppie con le virgole (che ho sistemato una per riga per maggiore leggibilità).
            Ricordarsi che i font utilizzati nel disegno devono corrispondere a quelli del documento principale, quindi, occorre attrezzare il preambolo del sorgente per la creazione del singolo disegno in modo opportuno (caricare gli stessi pacchetti di gestione dei font).
            R.

          • #85357
            Up
            0
            Down
            ::

            OldClaudio” post=84789Ma i disegni che vuoi fare esulano “un poco” dai diagrammi commutativi e il pacchetto TikZ è certamente più indicato. Solo che fra gli esperti del forum solo Cfiandra potrebbe aiutarti a occhi chiusi, senza nemmeno consultare il manuale di TikZ 🙂

            Non esageriamo 🙂 Il manuale va consultato sempre: io posso un po’ meno perché parto sempre da disegni “simili” che ho realizzato in precedenza o che mi ricordo esistano da qualche parte 😉

            Le soluzioni che ha proposto Roberto sono ottime: appena riesco propongo una soluzione che è una via di mezzo fra questa e questa. Automatizzare le cose, in questo caso, non è banale perché occorre tenere conto di quali vertici etichettare e collegare e disegnare il cerchio solo di conseguenza.

            Ciao
            Claudio

          • #85358
            Up
            0
            Down
            ::


            Grazie mille davvero a tutti!!! Proverò a fare il secondo disegno dopo queste delucidazioni. Comunque se qualcuno volesse cimentarsi anche sul secondo non mi arrabbio di certo:D, anzi! ( sono davvero una frana in queste cose xk è la prima volta che mi ritrovo ad utilizzare LaTeX per creare immagini) !!
            Grazie ancora!

          • #85359
            Up
            0
            Down
            ::


            Come promesso ecco la soluzione, di cui onestamente non ne sono troppo soddisfatto. Probabilmente da qualche parte nel codice c’è qualche errore grossolano nei conti degli angoli (e mi sfugge da più di mezz’ora 🙁 ) per cui va presa per quello che è.

            Certo, lato utente sarebbe decisamente più comoda perché in pratica con un comando e qualche opzione si fa tutto: `
            \documentclass[tikz,border=10pt]{standalone}
            \usepackage{tikz}

            \pgfkeys{/tikz/.cd,
            num vertex/.initial=10,
            num vertex/.get=\vertices,
            num vertex/.store in=\vertices,
            shift angle/.initial=0,
            shift angle/.get=\shiftangle,
            shift angle/.store in=\shiftangle,
            circle radius/.initial=10mm,
            circle radius/.get=\circleradius,
            circle radius/.store in=\circleradius,
            label font/.initial=\small,
            label font/.get=\labfont,
            label font/.store in=\labfont,
            }

            \tikzset{show vertex/.style={
            draw,
            circle,
            fill = black,
            minimum size = 0.8mm,
            inner sep = 0pt,
            outer sep=0pt
            }
            }

            \newcommand{\polygon}[1]{
            \pgfmathtruncatemacro\numvminusone{\vertices-1}
            \foreach \x in {0, …, \numvminusone} {
            \pgfmathtruncatemacro{\angle}{\shiftangle + 360 / \vertices * \x}
            \coordinate (p\x) at (\angle:\circleradius);
            }
            \foreach \x[count=\xi from 0] in {#1} {\global\let\maxnumitems\xi}

            \pgfmathtruncatemacro\endangle{360+\shiftangle}
            \foreach \x[count=\xi from 0] in {#1} {
            \pgfmathtruncatemacro{\angle}{\shiftangle + 360 / \vertices * \xi}
            \pgfmathtruncatemacro{\next}{mod(\xi-1, \numvminusone)}
            \ifnum\xi>0
            \draw (p\xi) — (p\next);
            \fi
            \ifnum\xi=\maxnumitems
            \draw[dashed] (p\xi) arc(\angle:\endangle:\circleradius);
            \fi
            \node[show vertex,] at (p\xi){};
            \coordinate[label={[font=\labfont]\angle:${[\x]}$}](x\xi) at (p\xi);
            }
            }

            \begin{document}

            \begin{tikzpicture}[num vertex=13,shift angle=-45]
            \polygon{n-2,n-1,0,1,2,3,4,5}
            \end{tikzpicture}

            \begin{tikzpicture}[label font=\scriptsize,num vertex=7,shift angle=114]
            \polygon{k+n-3,k+n-2,k+n-1,k+n,k+n+1,k+n+2,k+n+3}
            % k+n è il 4 elemento -> p3
            \draw(p3)
            –++(-1,0) node[show vertex,label={[font=\labfont]below:${[k-1]}$}]{}
            –++(-1,0) node[show vertex,label={[font=\labfont]below:${[k-2]}$}] (lownode){}
            ;
            \draw[dashed](lownode)–++(-1.25,0)coordinate (lownode2);
            \draw(lownode2) node[show vertex,label={[font=\labfont]below:${[2]}$}]{}
            –++(-1,0) node[show vertex,label={[font=\labfont]below:${[1]}$}]{}
            –++(-1,0) node[show vertex,label={[font=\labfont]below:${[0]}$}] (lownode){}
            ;
            \end{tikzpicture}
            \end{document}
            ` Il risultato:

            [attachment=692]Senzanome.png[/attachment]

            Ciao
            Claudio

            Attachments:
            You must be logged in to view attached files.
        Visualizzazione 7 filoni di risposte
        • Devi essere connesso per rispondere a questo topic.

        Go to top