Aggiungere nodi in disegno senza assi

  • Creatore
    Topic
  • #90352
    Up
    0
    Down
    ::


    Ciao a tutti.
    Dovrei aggiungere delle equazioni parallelamente “lati” di un triangolo di Penrose.
    Prima di impazzire nello scrivere il codice per disegnare tale triangolo, ho fatto una ricerca con Google e ho trovato questo link, che mi sembra mostrare un codice abbastanza ben scritto.
    Ho pertanto il seguente codice con cui genero un triangolo di Penrose:
    `\documentclass{article}
    \usepackage{tikz}
    \begin{document}
    \begin{center}
    \begin{tikzpicture}[scale=1, line join=bevel]

    % \a and \b are two macros defining characteristic
    % dimensions of the Penrose triangle.
    \pgfmathsetmacro{\a}{2.5}
    \pgfmathsetmacro{\b}{0.9}

    \tikzset{%
    apply style/.code = {\tikzset{#1}},
    triangle_edges/.style = {thick,draw=black}
    }

    \foreach \theta/\facestyle in {%
    0/{triangle_edges, fill = gray!50},
    120/{triangle_edges, fill = gray!25},
    240/{triangle_edges, fill = gray!90}%
    }{
    \begin{scope}[rotate=\theta]
    \draw[apply style/.expand once=\facestyle]
    ({-sqrt(3)/2*\a},{-0.5*\a}) —
    ++(-\b,0) —
    ({0.5*\b},{\a+3*sqrt(3)/2*\b}) — % higher point
    ({sqrt(3)/2*\a+2.5*\b},{-.5*\a-sqrt(3)/2*\b}) — % rightmost point
    ++({-.5*\b},-{sqrt(3)/2*\b}) — % lower point
    ({0.5*\b},{\a+sqrt(3)/2*\b}) —
    cycle;
    \end{scope}
    }
    \end{tikzpicture}
    \end{center}
    \end{document}
    `

    Il problema è quando provo ad inserire dei “nodi” con delle equazioni come testo, da posizionare a metà dei tre lati esterni del triangolo di Penrose.
    Ho fatto cinque o sei prove, andando a vedere la documentazione, ma non sono riuscito ad ottenere nulla di compilabile.
    Credo dipenda dal fatto che “mancano” gli axis, ma non sono sicuro né che sia questo il motivo né sulla possibile soluzione di questo problema.

    Qualsiasi suggerimento sarebbe davvero gradito 🙂
    Cordialità
    Leonardo

Visualizzazione 11 filoni di risposte
  • Autore
    Risposte
    • #90353
      Up
      0
      Down
      ::


      Errata corrige 🙂
      Ho notato che non riuscivo a scrivere dei “nodi” semplicemente perché toppavo la sintassi.
      L’ho scritta correttamente e ora riesco a posizionare dei nodi.
      Ho però il seguente problema per cui chiedo una vostra cortesissima illuminazione.
      Dovrei posizionare un’equazione (ma potete anche metterci la scritta foo 🙂 ), parallelamente e centrata, sul lato di sinistra del triangolo.
      Per le altre due… suppongo di potermela cavare da solo vedendo un suggerimento su come ottenere questo, perché al momento non riesco proprio a vedere la luce.

      Grazie in anticipo e scusate per il doppio post.

    • #90354
      Up
      0
      Down
      ::

      l3on4rdo” post=89880Credo dipenda dal fatto che “mancano” gli axis, ma non sono sicuro né che sia questo il motivo né sulla possibile soluzione di questo problema.

      In realtà non c’entrano nulla gli assi.

      Quel disegno utilizza una ricorsione perciò non è proprio banale mettere delle etichette. Infatti, inserendo direttamente dei nodi all’interno del percorso principale (e quindi dentro il [tt]foreach[/tt]), il testo sarebbe ripetuto per il numero di iterazioni. Ciò che si deve fare in questi casi è definire delle coordinate ausiliarie in mezzo al percorso ed inserire i nodi alla fine:`
      \documentclass[tikz,border=10pt]{standalone}
      \usepackage{tikz}
      \usetikzlibrary{calc}
      \begin{document}
      \begin{tikzpicture}[scale=1, line join=bevel]

      % \a and \b are two macros defining characteristic
      % dimensions of the Penrose triangle.
      \pgfmathsetmacro{\a}{2.5}
      \pgfmathsetmacro{\b}{0.9}

      \tikzset{%
      apply style/.code = {\tikzset{#1}},
      triangle_edges/.style = {thick,draw=black}
      }

      \foreach \theta/\facestyle in {%
      0/{triangle_edges, fill = gray!50},
      120/{triangle_edges, fill = gray!25},
      240/{triangle_edges, fill = gray!90}%
      }{
      \begin{scope}[rotate=\theta]
      \draw[apply style/.expand once=\facestyle]
      ({-sqrt(3)/2*\a},{-0.5*\a})–
      ++(-\b,0) coordinate(tp)–
      ({0.5*\b},{\a+3*sqrt(3)/2*\b}) coordinate(hp)–
      ({sqrt(3)/2*\a+2.5*\b},{-.5*\a-sqrt(3)/2*\b}) coordinate (rp)–
      ++({-.5*\b},-{sqrt(3)/2*\b}) coordinate(lp)–
      ({0.5*\b},{\a+sqrt(3)/2*\b}) coordinate(zp)–
      cycle;
      \end{scope}
      }
      \node[yshift=0.75cm] at ($(lp)!0.5!(hp)$){$x+y=100$};
      \node[rotate=60,above] at ($(tp)!0.5!(lp)$){$x+y=300$};
      \node[rotate=300,above,yshift=0.5cm] at ($(zp)!0.5!(tp)$){$x+y=300$};
      \end{tikzpicture}
      \end{document}
      ` Gioca a piacere con [tt]above[/tt] e parametri simili per modificare il punto di inserimento del testo.

      Ciao
      Claudio

    • #90355
      Up
      0
      Down
      ::


      Mi riaffaccio per ringraziarti! 🙂
      Ho più o meno risolto, anche se per problemi hardware sono impossibilitato a fare le prove “definitive”.
      Appena finisco di riconfigurare il sistema, mi riaffaccio per chiederti alcuni chiarimenti relativi ad alcune “chicche” che hai usato nel codice.

      Grazie ancora, ciao!

    • #90356
      Liverpool
      Partecipante
        Up
        0
        Down
        ::


        Se il disegno fosse stato fatto meglio, si sarebbe potuto usare più semplicemente [tt]pos=0.5, sloped[/tt]. Non che così non si possa fare, ma diventa più laborioso e non ne vale la pena. Io rifarei il disegno (il problema nasce dal fatto che il lato obliquo destro corrisponde all’angolo di 0 gradi, mentre sarebbe stato più intuitivo se fosse stata la base del triangolo).

        Ciao

      • #90357
        Up
        0
        Down
        ::

        Liverpool” post=90064Se il disegno fosse stato fatto meglio, si sarebbe potuto usare più semplicemente [tt]pos=0.5, sloped[/tt]. Non che così non si possa fare, ma diventa più laborioso e non ne vale la pena. Io rifarei il disegno (il problema nasce dal fatto che il lato obliquo destro corrisponde all’angolo di 0 gradi, mentre sarebbe stato più intuitivo se fosse stata la base del triangolo).

        Il punto, secondo me, è che l’autore originale non aveva pensato il disegno per aggiungerci delle etichette. Da qui forse l’idea di applicare un solo percorso. Chiaramente, per inserire delle etichette un solo percorso complica decisamente le cose, ma non è così difficile venirne a capo.

        Ciao
        Claudio

      • #90358
        Liverpool
        Partecipante
          Up
          0
          Down
          ::

          cfiandra” post=90071Chiaramente, per inserire delle etichette un solo percorso complica decisamente le cose, ma non è così difficile venirne a capo.

          Claudio, non c’è nessun problema ad inserire un nodo in un percorso, perché la posizione corrente viene calcolata rispetto all’ultima istruzione e non rispetto a tutta la linea, com’è scritto nell’articolo di Tommaso a pag. 27. Il problema è ruotare correttamente le etichette, visto che è stata usata l’opzione [tt]rotate[/tt] che, come sai, modifica il comportamento di sloped. Nell’esempio specifico, [tt]pos=0.5, rotate=\theta, sloped, above[/tt] funzionano correttamente tranne che per la base, che presenta un’etichetta capovolta.
          `\foreach \theta/\facestyle/\testo in {%
          0/{triangle_edges, fill = gray!50}/{$a$},
          120/{triangle_edges, fill = gray!25}/{$b$},
          240/{triangle_edges, fill = gray!90}/{$c$}%
          }{
          \begin{scope}[rotate=\theta]
          \draw[apply style/.expand once=\facestyle]
          ({-sqrt(3)/2*\a},{-0.5*\a}) —
          ++(-\b,0) —
          ({0.5*\b},{\a+3*sqrt(3)/2*\b}) — % higher point
          ({sqrt(3)/2*\a+2.5*\b},{-.5*\a-sqrt(3)/2*\b}) % rightmost point
          node [pos=0.5, rotate=\theta, sloped, above] {\testo} —
          ++({-.5*\b},-{sqrt(3)/2*\b}) — % lower point
          ({0.5*\b},{\a+sqrt(3)/2*\b}) —
          cycle;
          \end{scope}
          }`

          Ciao

        • #90359
          Up
          0
          Down
          ::

          Liverpool” post=90072

          Chiaramente, per inserire delle etichette un solo percorso complica decisamente le cose, ma non è così difficile venirne a capo.

          Claudio, non c’è nessun problema ad inserire un nodo in un percorso, perché la posizione corrente viene calcolata rispetto all’ultima istruzione e non rispetto a tutta la linea, com’è scritto nell’articolo di Tommaso a pag. 27. Il problema è ruotare correttamente le etichette, visto che è stata usata l’opzione [tt]rotate[/tt] che, come sai, modifica il comportamento di sloped.

          Con quella frase mi riferivo al disegno corrente, non in generale. 😉 E credo che con qualche acrobazia si possa pure venire a capo del problema, se ho tempo vedo come fare.

          Ciao
          Claudio

        • #90360
          Liverpool
          Partecipante
            Up
            0
            Down
            ::

            cfiandra” post=90073E credo che con qualche acrobazia si possa pure venire a capo del problema, se ho tempo vedo come fare.

            Una possibile soluzione:

            Spoiler

            `
            \documentclass{article}
            \usepackage{tikz}
            \begin{document}
            \begin{center}
            \begin{tikzpicture}[scale=1, line join=bevel]

            % \a and \b are two macros defining characteristic
            % dimensions of the Penrose triangle.
            \pgfmathsetmacro{\a}{2.5}
            \pgfmathsetmacro{\b}{0.9}

            \tikzset{%
            apply style/.code = {\tikzset{#1}},
            triangle_edges/.style = {thick,draw=black}
            }

            \foreach \theta/\facestyle/\testo in {%
            0/{triangle_edges, fill = gray!50}/{$a$},
            120/{triangle_edges, fill = gray!25}/{$b$},
            240/{triangle_edges, fill = gray!90}/{$c$}%
            }{
            \begin{scope}[rotate=\theta]
            \draw[apply style/.expand once=\facestyle]
            ({-sqrt(3)/2*\a},{-0.5*\a}) —
            ++(-\b,0) —
            ({0.5*\b},{\a+3*sqrt(3)/2*\b}) — % higher point
            ({sqrt(3)/2*\a+2.5*\b},{-.5*\a-sqrt(3)/2*\b}) % rightmost point
            node [pos=0.5, rotate=\theta+180*(\theta>150?1:0),
            sloped, anchor=-90+180*(\theta>150?1:0)] {\testo} —
            ++({-.5*\b},-{sqrt(3)/2*\b}) — % lower point
            ({0.5*\b},{\a+sqrt(3)/2*\b}) —
            cycle;
            \end{scope}
            }
            \end{tikzpicture}
            \end{center}
            \end{document}`

            Ciao

          • #90361
            Up
            0
            Down
            ::


            Siete uno spettacolo raro! 🙂
            Appena finisco di sistemare il nuovo portatile con cui dovrei riprendere al più presto a lavorare, mi riaffaccio con alcune considerazioni che non ho avuto modo di scrivervi 🙂

            Grazie ancora!

          • #90362
            Up
            0
            Down
            ::


            Ciao di nuovo.
            Ho bisogno di un consiglio su come regolarmi.
            Un mio amico ha visto il disegno prodotto da questo codice (il triangolo di Penrose che le equazioni sui lati) e mi ha chiesto se posso fargli un’immagine che possa andare bene per il suo avatar su un forum 🙂

            Ho provato a scalare l’immagine, ma il risultato non è dei migliori.
            Cosa mi consigliate di fare per produrre direttamente un’immagine 90*90 (pixel) in modo che possa caricarla come avatar?

            Grazie ancora, ciao! 🙂

          • #90363
            Liverpool
            Partecipante
              Up
              0
              Down
              ::


              Siano \(L\) la dimensione in cm, \(Q\) la dimensione in pixel e \(r\) la risoluzione in pixel/pollici. Vale la relazione numerica: \(L=2.54\times\frac{Q}{r}\)
              Nel tuo caso, essendo \(Q=90\) pixel e scelto \(r=96\) pixel/pollici si ha \(L\simeq2.38\) cm.

              Realizzata l’immagine con queste dimensioni, il passo successivo è convertirla in un formato raster con una risoluzione di 96 pixel/pollici.

              Ciao

            • #90364
              Up
              0
              Down
              ::


              Con estremo ritardo, poiché in clausura per analisi dati 🙂 , ringrazio sentitamente!
              Appena ho modo faccio la prova, anche se posso mettere la mano sul fuoco che funzioni.
              😀

          Visualizzazione 11 filoni di risposte
          • Devi essere connesso per rispondere a questo topic.

          Go to top