TikZ, pgfplots e l’algoritmo di Hobby

  • Creatore
    Topic
  • #78137
    OldClaudio
    Partecipante
      Up
      0
      Down
      ::


      Oggi ho aggiornato MacTeX (TeX Live) e mi è stato installato il pacchetto hobby. La parola richiama il significato che si da in Italia cioè passatempo. ma a me ha prodotto un immediato aggancio con John Hobby, colui che ha creato l’algoritmo per tracciare le curve di Bézier di terzo grado in METAFONT, algoritmo che poi ha trasferito anche in METAPOST, scritto completamente da John Hobby.

      L’algoritmo è descritto nel METAFONT book; è abbastanza complesso, tanto che ho desistito dall’implementarlo in certi miei pacchetti, già sufficientemente complicati per loro conto senza bisogno di risolvere le equazioni richieste dall’algoritmo di Hobby.

      Ora Andrew Stacey l’ha scritto per essere usato come libreria di TikZ e di pgfplots. Il confronto fra la qualità delle curve tracciate grazie a questo algoritmo e quelle tracciate con l’algoritmo di default di TikZ e pgfplots è, come dicono gli angloamericani, “dramatic”.

      Mi vengono in mente le discussioni su questo forum quando Lorenzo cercava di scrivere l’articolo di pgfplots, e non si riusciva e gestire quanti nodi fossero necessari per campionare una curva affinché venisse tracciata correttamente e non assomigliasse ad una spezzata. La risposta è data da questo pacchetto; Io non l’ho ancora provato, ma invito Lorenzo, Tommaso, Liverpool, cfiandra, robitex (che produsse il codice per lualatex+pgfplots in merito alle figure di Lissajou) e tutti quelli che hanno partecipato a quella discussione ad esaminare con attenzione questo pacchetto con gli stessi disegni che allora richiedevano decine e talvolta centinaia di punti per essere tracciate correttamente.

      Tenete presente che quell’algoritmo è quello usato da METAFONT per tracciare i contorni dei caratteri; di solito una decina-quindicina di nodi sono sufficienti per la maggior parte dei caratteri; rarissimamente si supera la ventina; eppure i disegni dei caratteri sono molto complessi (be’, non il contorno di una O, ma la maggior parte dei contorni lo è). Le curve che abbiamo visto in quelle discussioni erano abbastanza complesse, ma quello che mi stupiva era l’enorme numero di punti necessario tanto che Lorenzo, ricordo bene, fu costretto ad aumentare la memoria operativo del suo programma di composizione.

    Visualizzazione 7 filoni di risposte
    • Autore
      Risposte
      • #78138
        Up
        0
        Down
        ::


        Ottima segnalazione 🙂

        Ho notato che è stato sviluppato in seguito ad una domanda su TeX.SX http://tex.stackexchange.com/questions/54771/curve-through-a-sequence-of-points-with-metapost-and-tikz e anche altre risposte sono notevoli.

        Appena possibile farò qualche prova, ma non so se sia possibile utilizzarlo con pgfplots; le librerie prodotte sono per pgf e TikZ.

        Una curiosità per OldClaudio: pacchetto calligraphy (sempre di Andrew Stacey) http://bazaar.launchpad.net/~tex-sx/tex-sx/development/files. Ha come dipendenza spath, sempre nello stesso sito.

        Ciao
        Claudio

      • #78139
        OldClaudio
        Partecipante
          Up
          0
          Down
          ::

          Appena possibile farò qualche prova, ma non so se sia possibile utilizzarlo con pgfplots; le librerie prodotte sono per pgf e TikZ.

          Direi proprio di sì, visto che le ha scritte apposta per tikz e pgfplots.

          Claudio, grazie per la segnalazione di calligraphy e spath.

        • #78140
          Liverpool
          Partecipante
            Up
            0
            Down
            ::


            Grazie mille OldClaudio, intervento interessantissimo come sempre. Purtroppo il mio velocissimo MiKTeX non rende ancora disponibile il pacchetto, perciò aspetterò ancora un po’ per fare le mie prove. Nel frattempo ho scaricato il manuale da CTAN e gli darà una bella occhiata.
            Per @cfiandra, a suo tempo mi era sembrato di capire che l’algoritmo di pgfplots per lo smooth sia lo stesso di Ti[k]Z, perciò risolto un problema, si risolve automaticamente l’altro.

            Nel frattempo segnalo che nella nuova versione di pgfplots sembrano risolti i problemi di deformazione lamentati nei grafici tridimensionali (sfera e cubo) quando è attiva l’opzione [tt]axis equal[/tt] o equivalente.

            Ciao

          • #78141
            Up
            0
            Down
            ::

            Liverpool” post=77248
            Per @cfiandra, a suo tempo mi era sembrato di capire che l’algoritmo di pgfplots per lo smooth sia lo stesso di Ti[k]Z, perciò risolto un problema, si risolve automaticamente l’altro.

            Quello che mi chiedevo io è se includendo la nuova libreria con

            `
            \usetikzlibrary{hobby}
            `
            automaticamente [tt]pgfplots[/tt] la riconosca e utilizzi il nuovo l’algoritmo.

            Ciao
            Claudio

          • #78142
            OldClaudio
            Partecipante
              Up
              0
              Down
              ::


              Da quel che ho letto dovrebbe essere così, purché hobby sia caricato dopo, visto che modifica alcuni comandi interni di pdfplots.

              Così almeno io ho capito.

            • #78143
              Liverpool
              Partecipante
                Up
                0
                Down
                ::

                cfiandra” post=77249Quello che mi chiedevo io è se includendo la nuova libreria con [tt]\usetikzlibrary{hobby}[/tt] automaticamente [tt]pgfplots[/tt] la riconosca e utilizzi il nuovo l’algoritmo.

                Finalmente ho potuto provare il pacchetto, dopo averne letto la documentazione (esclusa la descrizione dell’algoritmo). Il miglioramento rispetto all’algoritmo nativo di TikZ è notevole, ma chi l’ha realizzato non ha pensato di sostituire l’opzione [tt]smooth[/tt], ma semplicemente di creare una nuova opzione per [tt]draw[/tt]. In questo modo né il [tt]\draw plot[/tt] di TikZ, né l'[tt]\addplot[/tt] di pgfplots sono in grado al momento di beneficiare del nuovo algoritmo.
                Tra l’altro mi chiedo perché l’autore abbia realizzato un nuovo pacchetto e non abbia cercato invece di integrare direttamente l’algoritmo in TikZ come libreria, richiedendo la collaborazione degli autori di quest’ultimo. In tal caso, forse la compatibilità sarebbe stata garantita dal principio.
                Resto fiducioso che in futuro l’algoritmo di smooth verrà modificato.

              • #78144
                Up
                0
                Down
                ::

                Liverpool” post=77339Finalmente ho potuto provare il pacchetto, dopo averne letto la documentazione (esclusa la descrizione dell’algoritmo). Il miglioramento rispetto all’algoritmo nativo di TikZ è notevole, ma chi l’ha realizzato non ha pensato di sostituire l’opzione [tt]smooth[/tt], ma semplicemente di creare una nuova opzione per [tt]draw[/tt]. In questo modo né il [tt]\draw plot[/tt] di TikZ, né l'[tt]\addplot[/tt] di pgfplots sono in grado al momento di beneficiare del nuovo algoritmo.
                Tra l’altro mi chiedo perché l’autore abbia realizzato un nuovo pacchetto e non abbia cercato invece di integrare direttamente l’algoritmo in TikZ come libreria, richiedendo la collaborazione degli autori di quest’ultimo. In tal caso, forse la compatibilità sarebbe stata garantita dal principio.
                Resto fiducioso che in futuro l’algoritmo di smooth verrà modificato.

                In effetti era quello che sospettavo… dal mio punto di vista sarebbe comodo avere [tt]\usepgfplotslibrary{hobby}[/tt] e sapere che [tt]\addplot[/tt] sfrutta l’algoritmo, ma onestamente non credo sia banale da implementare. Io finora ho fatto qualche prova con TikZ e i risultati mi piacciono.

                [OT]
                A proposito di librerie nuove per TikZ.. presto dovrebbe esserne disponibile una nuova molto interessante. 🙂 Aspettiamo con ansia che l’autore la pubblichi 😉

                Ciao
                Claudio

              • #78145
                Up
                0
                Down
                ::


                Riprendo la discussione dopo qualche esperimento sul pacchetto. 🙂

                In realtà l’autore ha predisposto che il pacchetto sia fruibile come libreria (in realtà creare delle librerie per TikZ non è poi così complicato), ma credo che sostituire in toto il precedente algoritmo per avere immediatamente [tt]\draw[/tt] ed [tt]\addplot[/tt] hobby-aware (anche con il benestare di Tantau e Feuersänger) non sarebbe così facile.

                La “nuova” versione di hobby, presente su launchpad, tra le altre cose, permette però di sfruttare l’algoritmo per il classico plot di TikZ su coordinate. Ad esempio, si può scrivere:
                `
                \tikz[hobby] \draw (1,0) — plot coordinates {(0,0) (1,1) (2,0) (3,1) (2,1) (10:2cm)};
                `
                Questa nuova versione potrebbe essere disponibile a breve anche su CTAN.

                Ciao
                Claudio

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

            Go to top