B-Spline: possibile?

  • Creatore
    Topic
  • #104461
    Up
    0
    Down
    ::


    Ciao, volevo sapere se è possibile costruire una B-Spline come in figura in allegato. Grazie, ciao.

    `
    \documentclass{article}
    \usepackage[T1]{fontenc}
    \usepackage[utf8]{inputenc}
    \usepackage[english,italian]{babel}
    \usepackage{amsmath}
    \usepackage{pgfplots}
    \pgfplotsset{compat=1.9}

    \begin{document}
    \begin{center}
    \begin{tikzpicture}
    \begin{axis} [grid=major,width=12cm,ymin=35,ymax=50,ytick={35,40,…,50},
    legend pos=outer north east,
    xlabel={N\ped{fila fori}}, ylabel={Nu\ped{medio}}]

    \addplot [red, thick, mark=*]
    coordinates {
    (1800,48)
    (2000,45)
    (2500,47)
    (5000,42.5)
    (10000,40.5)
    (15000,40)
    (35000,39)
    (37000,37)
    };

    \legend {Corr}
    \end{axis}
    \end{tikzpicture}
    \end{center}
    \end{document}
    `

    [attachment=1485]b-spline.JPG[/attachment]

    [attachment=1488]Screenshotfrom2015-12-23215750.png[/attachment]

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

      Gup” post=104501Ciao, volevo sapere se è possibile costruire una B-Spline come in figura in allegato. Grazie, ciao.

      `
      \documentclass{article}
      \usepackage[T1]{fontenc}
      \usepackage[utf8]{inputenc}
      \usepackage[english,italian]{babel}
      \usepackage{amsmath}
      \usepackage{pgfplots}
      \pgfplotsset{compat=1.9}

      \begin{document}
      \begin{center}
      \begin{tikzpicture}
      \begin{axis} [grid=major,width=12cm,ymin=35,ymax=50,ytick={35,40,…,50},
      legend pos=outer north east,
      xlabel={N\ped{fila fori}}, ylabel={Nu\ped{medio}}]

      \addplot [red, thick, mark=*]
      coordinates {
      (1800,48)
      (2000,45)
      (2500,47)
      (5000,42.5)
      (10000,40.5)
      (15000,40)
      (35000,39)
      (37000,37)
      };

      \legend {Corr}
      \end{axis}
      \end{tikzpicture}
      \end{center}
      \end{document}
      `

      [attachment=1485]b-spline.JPG[/attachment]

      [attachment=1488]Screenshotfrom2015-12-23215750.png[/attachment]

      Si, è possibile! Purtroppo, sul forum si vede spesso grafici con troppi campioni che causano problemi di memoria. Qui il problema è l’esatto contrario: hai pochissimi campioni perciò solo aumentandoli la tua curva sarà più dolce.

      Ciao
      Claudio

    • #104463
      Up
      0
      Down
      ::


      Ciao, grazie della risposta. Quando dici che è possibile farlo, significa che esiste un comando specifico da dare? Perché ad esempio, con il programma con cui ho fatto questo grafico, ho la possibilità di scegliere da un menù a tendina, il tipo di linea: se “Straight” o “B-Spline”. È ovvio che se anziché avere 8 dati ne avessi 1000, anche con la linea Straight avrei in realtà una curva dolce perché i punti sono molto fitti. Volevo sapere quindi se con LaTeX è possibile fare una cosa del genere, cioè se esiste un comando specifico per fare una curva “dolce” piuttosto che unire i vari punti con dei segmenti.

      N.B come si vede dal grafico sotto, con la B-Spline, la curva non passa dai punti che ho specificato, ma a me va bene lo stesso. Grazie, ciao.

      [attachment=1489]graoh.JPG[/attachment]

      Attachments:
      You must be logged in to view attached files.
    • #104464
      robitex
      Amministratore del forum
        Up
        0
        Down
        ::


        Ciao.
        Mi puoi dare qualche notizia in più sul perché?
        La B-spline è una tua precisa specifica oppure solo un modo per interpolare?
        R.

      • #104465
        Up
        0
        Down
        ::


        Ciao. Non è una mia precisa specifica. Ho citato la B-Spline perché nel programma che ho usato ho quella come opzione, però altri tipi di interpolazione vanno bene. Il mio obiettivo sostanzialmente è ottenere una curva smooth e non spigolosa.

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


          Con pgfplots, molto semplicemente aggiungi l’opzione smooth al comando \addplot.
          Tuttavia, non viene generata la b-spline che interpola i punti dati ma le curve continue anche nella derivata che passano per i punti dati.
          Se desideri invece una curva interpolante, puoi ottenerne con un software opportuno le coordinate in un file per il plot “grezzo”.
          Oppure puoi calcolare la curva interpolante e inserire dei comandi \draw .. controls and .. ; ma in questo caso temo problemi con la massima distanza che TeX può gestire.
          R.

        • #104467
          OldClaudio
          Partecipante
            Up
            0
            Down
            ::


            Dipende se quei primi tre punti sono significativi, o se derivano da “errori” di misura; credo di capire che se non è importante che la curva approssimante interpoli i punti dati, tu possa mercarli con i pallini, ma escluderli dal tracciato, specificando smooth per le opzioni di \plot…

            Altrimenti per pdfgplots esiste anche il pacchetto hobby che consente di tracciare una curva interpolante con lo stesso criterio con il quale vengono tracciati i contorni dei font, cioè con delle spline di Bézier che pgfplots è in grado di tracciare beneissimo; naturalmente devi evitare gli overlow, visto che il massimo numero fratto che TeX riesce a gestire vale 16383.99998; quindi devi scalare le ascisse almeno di un valore 1000. Anche in questo caso converrebbe eliminare i punti 2 e 3 che sembrano fuori posto. MA se li lasci con l’algoritmo di Hobby riesci probabilmente a tracciare una curva smoot con le due gobbe, ma dubito che sia una bella curva.

            Tinei presente che le B-spline sono una generalizzazione delle curve di Bézier, e comprendono queste ultime. gli algoritmi per determinare gli archi e le tangenti della curva approssimante sono molto complessi, direi troppo complessi per le piccole capacità di calcolo di ogni motore di composizione del sistema TeX. LuaLaTeX potrebbe fare calcoli complessi, perché si appoggia al linguaggio di scripting Lua, ma bisogna programmarglieli, e non è per niente banale; anche in FORTRAN, vecchio linguaggio specializzato nei calcoli e ancora oggi utilissimo per i calcoli, sarebbe un programma di molte centinaia di righe da scrivere.

            Ecco perché la grafica di pgfplots è eccezionale, ma viene svolta dal un modulo di estensione che estende alal grafica alcune funzionalità grafiche,ma il sistema TeX non è nato per fare disegni; quando li fa e riesce a farli ne fa di bellissimi, ma non bisogna tirare troppo la corda.
            Si interfaccia con programmi specializzati nel calcolo come gnuplot, asymptote, e simili, ma va a finire che spesso epr avere disegni decenti una decina di nodi sono assolutamente insufficienti.

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

        Go to top