Psclip con PStricks

  • Creatore
    Topic
  • #25160
    Up
    0
    Down
    ::


    Ciao a tutti,

    ho un problema con PStricksche vorrei sottoporvi. Non uso da molto il pacchetto, fino ad ora ho esportato grafici in eps da Matlab o sfruttato disegni in Adobe Illustrator anch’essi esportati in eps (per compilare in PDFLaTeX li ho poi convertiti in PDF con eps2pdf). Volendo imparare ad usare questo pacchetto, mi sono messo ad applicare ai miei casi alcuni degli esempi sul manuale di PSTricks. La funzione \psclip dovrebbe ritagliare l’immagine secondo dei contorni stabiliti. Vi posto il mio codice dove confronto l’esempio del manuale con il mio caso:

    `
    \documentclass[a4paper,11pt]{book}
    \usepackage{fourier}
    \usepackage[latin1]{inputenc}
    \usepackage[T1]{fontenc}
    \usepackage{psfrag}
    \usepackage{pstricks}
    \usepackage{pstricks-add}
    \usepackage{pst-plot}

    \begin{document}
    \thispagestyle{empty}
    \psset{xunit=5mm,yunit=4mm}% 1:20, or =0.1mm for 1:10
    \begin{pspicture}(0,0)(24,10)
    \psgrid[subgriddiv=1,griddots=10,gridlabels=7pt](0,0)(24,10)

    %clip mio
    \psclip{%
    \pscustom[linestyle=none]{%
    \pscurve[linecolor=blue]{-}(17,4)(16,6)(14.5,8)(13,9)(10,8)(8,5)
    \lineto(20,0)}
    \pscustom[linestyle=none]{%
    \pscurve[linecolor=black]{-}(17,4)(15,5.5)(13,6)(8,5)
    \lineto(0,0)}}
    \psframe*[linecolor=red](8,4)(17,10)
    \endpsclip
    \pscurve[linecolor=black]{-}(0,0.8)(4,1.3)(5,1.8)(7,3.4)(8,5)(13,6)(15,5.5)(17,4)(19,1.8)(20,1.3)(24,0)
    \pscurve[linecolor=blue]{-}(4,0)(6,2)(8,5)(10,8)(13,9)(14.5,8)(16,6)(17,4)(18,2)(20,0)

    %clip esempio manuale
    \psclip{%
    \pscustom[linestyle=none]{%
    \psplot{.5}{4}{2 x div}
    \lineto(4,4)}
    \pscustom[linestyle=none]{%
    \psplot{0}{3}{3 x x mul 3 div sub}
    \lineto(0,0)}}
    \psframe*[linecolor=gray](0,0)(4,4)
    \endpsclip
    \psplot[linewidth=1.5pt]{.5}{4}{2 x div}
    \psplot[linewidth=1.5pt]{0}{3}{3 x x mul 3 div sub}
    \end{pspicture}
    \end{document} `

    Nell’esempio da manuale sono definite 2 curve attraverso \psplot ma le loro linee, che servono solo a delimitare l’area da clippare, dovrebbero non vedersi per l’opzione linestyle=none (i 2 psplot sono infatti poi ripetuti con linewidth 1.5pt per rendere le curve visibili alla fine). Con \psclip si ritaglia un’area tra queste due curve che poi risulta colorata di grigio in forza al comando \psframe*. Il risultato grafico consiste nel colorare di grigio l’area racchiusa tra le due curve, una concava ed una convessa, che si intersecano in 2 punti.

    Nel mio esempio, uso \pscurve al posto di \psplot, ma secondo il manuale non dovrei avere problemi. Con pscurve ottengo una curva per interpolazione sui punti indicati quindi buona quanto quelle prodotte da psplot. Nel mio caso ho però due “quasi parabole” con concavità rivolta al basso.

    Una zona colorata la ottengo ma non come desiderata (dovrei colorare l’area tra i due punti di intersezione di un colore e – ma questo non è presente nel codice postato – le aree racchiuse tra i due grafici al di fuori dei punti di intersezione con un altro colore)…non riesco a capire il motivo per cui non funziona come voluto, ma penso che il problema stia nell’uso dei \lineto che in un certo senso “chiudono” le curve da clippare..ma questa parte proprio non mi è chiara..e in effetti i miei \lineto li ho definiti su coordinate sparate un po’ a caso per vedere che effetto ottenevo.

    Se avete un’idea o un riferimento ad un manuale più preciso sull’uso di psclip (che da manuale pstrick non è proprio chiarissimo) mi date una mano,

    Grazie a tutti,

    Cristiano

Visualizzazione 1 filone di risposte
  • Autore
    Risposte
    • #25161
      Up
      0
      Down
      ::


      Sinceramente non ho capito bene quali aree devi colorare. Se può esserti d’aiuto, il codice seguente ti permette di colorare l’area delimitata dalle due curve (rossa e blu):

      `%clip mio
      \psclip{%
      \pscustom[linestyle=none]{%
      \pscurve[linecolor=blue]{-}(4,0)(6,2)(8,5)(10,8)(13,9)(14.5,8)(16,6)(17,4)(18,2)(20,0)
      \lineto(0,0)
      }
      \pscustom[linestyle=none]{%
      \pscurve[linecolor=black]{-}(0,0.8)(4,1.3)(5,1.8)(7,3.4)(8,5)(13,6)(15,5.5)(17,4)(19,1.8)(20,1.3)(24,0)
      \lineto(8,15)
      }}
      \psframe*[linecolor=red](8,4)(17,10)
      \endpsclip
      \pscurve[linecolor=black]{-}(0,0.8)(4,1.3)(5,1.8)(7,3.4)(8,5)(13,6)(15,5.5)(17,4)(19,1.8)(20,1.3)(24,0)
      \pscurve[linecolor=blue]{-}(4,0)(6,2)(8,5)(10,8)(13,9)(14.5,8)(16,6)(17,4)(18,2)(20,0) `

      Come vedi ho semplicemente sostituito in blocco tutte le coordinate dei punti per cui passa ciascuna curva nella relativa definizione all’interno del comando \psclip. Per le coordinate da dare a \lineto mi sembra che ci siano dei margini di libertà. L’importante è che la linea “copra” l’area da colorare. Prova a cambiare qualche valore per renderti conto di come funziona. Dalla documentazioine di pstricks, effettivamente, non si capisce molto.

      Ciao,
      Ivan

    • #25162
      Up
      0
      Down
      ::


      Grazie del suggerimento!

      come spesso succede quando si ha fretta di completare un lavoro, mi sono messo a spulciare guide, esempi etc..fino a quando mi è capitato sotto gli occhi un codice che bene o male girava per il mio caso 😆

      Comunque guarderò con attenzione il tuo suggerimento.

      Grazie ancora,

      Cristiano

Visualizzazione 1 filone di risposte
  • Devi essere connesso per rispondere a questo topic.

Go to top