Spline di Beziér e riempimento in TikZ

  • Creatore
    Topic
  • #74174
    Up
    0
    Down
    ::


    Ciao a tutti,

    se compilate questo codice:
    `\documentclass[a4paper,11pt,extrafontsizes,twoside,openright]{memoir}

    \usepackage{etex}
    \usepackage[T1]{fontenc}
    \usepackage[utf8]{inputenc}
    \usepackage[italian]{babel}
    \usepackage{microtype}

    \usepackage{xcolor}
    \usepackage{tikz}
    \usetikzlibrary{arrows}
    \usetikzlibrary{backgrounds}
    \usetikzlibrary{calc}
    \usetikzlibrary{decorations.pathmorphing}
    \usetikzlibrary{decorations.markings}
    \usetikzlibrary{intersections}
    \usetikzlibrary{positioning}
    \usetikzlibrary{shadows}
    \usetikzlibrary{shapes}
    \usetikzlibrary{through}

    \def\myFm{*1cm}

    \begin{document}

    \begin{figure}[tb]
    \centering
    \begin{tikzpicture}
    %riempimento
    \pgfpathmoveto{\pgfpoint{4.38568\myFm}{3.87882\myFm}}
    \pgfpathcurveto{\pgfpoint{4.39205\myFm}{3.76561\myFm}}{\pgfpoint{4.3888\myFm}{3.65207\myFm}}{\pgfpoint{4.37598\myFm}{3.53941\myFm}}
    \pgfpathcurveto{\pgfpoint{4.3606\myFm}{3.40423\myFm}}{\pgfpoint{4.3315\myFm}{3.27096\myFm}}{\pgfpoint{4.2887\myFm}{3.14181\myFm}}
    \pgfpathcurveto{\pgfpoint{4.24992\myFm}{3.02478\myFm}}{\pgfpoint{4.2001\myFm}{2.91179\myFm}}{\pgfpoint{4.14324\myFm}{2.8024\myFm}}
    \pgfpathcurveto{\pgfpoint{4.07281\myFm}{2.6669\myFm}}{\pgfpoint{3.99175\myFm}{2.53719\myFm}}{\pgfpoint{3.90081\myFm}{2.4145\myFm}}
    \fill [gray!50] — (3.90081\myFm,3.87882\myFm);

    \fill [gray!50] (3.11378\myFm,2.87028\myFm) — (3.90081\myFm,2.4145\myFm) |- (3.3853\myFm,3.87882\myFm);

    \pgfpathmoveto{\pgfpoint{3.3853\myFm}{3.87882\myFm}}
    \pgfpathcurveto{\pgfpoint{3.41376\myFm}{3.72195\myFm}}{\pgfpoint{3.41704\myFm}{3.56154\myFm}}{\pgfpoint{3.395\myFm}{3.40364\myFm}}
    \pgfpathcurveto{\pgfpoint{3.3729\myFm}{3.24528\myFm}}{\pgfpoint{3.32436\myFm}{3.08891\myFm}}{\pgfpoint{3.22045\myFm}{2.96726\myFm}}
    \pgfpathcurveto{\pgfpoint{3.18911\myFm}{2.93057\myFm}}{\pgfpoint{3.15327\myFm}{2.89799\myFm}}{\pgfpoint{3.11378\myFm}{2.87028\myFm}}
    \fill [white] — (3.11378\myFm,3.87882\myFm);
    \pgfusepath{draw}

    %tracciamento “bordo”
    \pgfpathmoveto{\pgfpoint{4.38568\myFm}{3.87882\myFm}}
    \pgfpathcurveto{\pgfpoint{4.39205\myFm}{3.76561\myFm}}{\pgfpoint{4.3888\myFm}{3.65207\myFm}}{\pgfpoint{4.37598\myFm}{3.53941\myFm}}
    \pgfpathcurveto{\pgfpoint{4.3606\myFm}{3.40423\myFm}}{\pgfpoint{4.3315\myFm}{3.27096\myFm}}{\pgfpoint{4.2887\myFm}{3.14181\myFm}}
    \pgfpathcurveto{\pgfpoint{4.24992\myFm}{3.02478\myFm}}{\pgfpoint{4.2001\myFm}{2.91179\myFm}}{\pgfpoint{4.14324\myFm}{2.8024\myFm}}
    \pgfpathcurveto{\pgfpoint{4.07281\myFm}{2.6669\myFm}}{\pgfpoint{3.99175\myFm}{2.53719\myFm}}{\pgfpoint{3.90081\myFm}{2.4145\myFm}}

    \pgfpathmoveto{\pgfpoint{3.11378\myFm}{2.87028\myFm}}
    \pgfpathlineto{\pgfpoint{3.90081\myFm}{2.4145\myFm}}

    \pgfpathmoveto{\pgfpoint{3.3853\myFm}{3.87882\myFm}}
    \pgfpathcurveto{\pgfpoint{3.41376\myFm}{3.72195\myFm}}{\pgfpoint{3.41704\myFm}{3.56154\myFm}}{\pgfpoint{3.395\myFm}{3.40364\myFm}}
    \pgfpathcurveto{\pgfpoint{3.3729\myFm}{3.24528\myFm}}{\pgfpoint{3.32436\myFm}{3.08891\myFm}}{\pgfpoint{3.22045\myFm}{2.96726\myFm}}
    \pgfpathcurveto{\pgfpoint{3.18911\myFm}{2.93057\myFm}}{\pgfpoint{3.15327\myFm}{2.89799\myFm}}{\pgfpoint{3.11378\myFm}{2.87028\myFm}}
    \pgfusepath{draw}
    \end{tikzpicture}
    \label{fig:esempio}
    \caption{Esempio.}
    \end{figure}

    \end{document}`
    otterrete un disegno che è una parte di questo.

    Riguardo a ciò che ho fatto, avrei tre domande da porre:

    1. La mia idea è quella di realizzare quella parte, ripeterla e specchiarla. C’è un approccio migliore?
    2. È possibile specchiare un certo disegno rispetto a un asse?
    3. Se ingrandite il disegno ottenuto con il codice, vedrete che i segmenti che costituiscono il “bordo” non sono uniti al meglio. Come posso fare in modo che le tre parti del “bordo” vengano raccordate correttamente?

    Grazie mille e buona giornata,
    Marco.

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


      Ciao,

      non so perché, ma non riesce a caricarmi il file. 🙁 Ritenterò.

      Ciao,
      Marco.

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

        Marco87″ post=73115Ciao,

        non so perché, ma non riesce a caricarmi il file. 🙁 Ritenterò.

        Ciao,
        Marco.

        Troppo grande.
        Mi correggo. File piccolo ma forse dal nome già esistente.

        R.

        Attachments:
        You must be logged in to view attached files.
      • #74177
        Up
        0
        Down
        ::


        Ciao,

        grazie Roberto. Nel frattempo ho caricato altrove e ho messo il link (ho corretto il primo messaggio), ma sicuramente ne terrò conto per la prossima volta.

        Grazie e ciao,
        Marco.

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


          Credo si possa fare anche con tikz con l’opportuna strategia, ma …
          il tuo sembra un lavoro perefetto per METAPOST…
          se ho tempo oggi ti scriverò qualcosa.

          In particolare, si potrebbe in un ciclo for, creare il path dell’onda, poi usarlo per creare in un attimo le due aree grigie.
          Creata la figura scontornata in pdf, non rimane poi altro che inserirla.

          Ciao
          R.

        • #74179
          Up
          0
          Down
          ::


          Ciao Roberto,

          intanto grazie!

          Ciao,
          Marco.

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

            Marco87″ post=73125Ciao Roberto,

            intanto grazie!

            Ciao,
            Marco.

            Eccomi con un codice METAPOST completamente da rifinire ma che concettualmente di mostra come si può risolvere:
            `\startMPpage
            % definizione di una unit
            numeric u;
            u := 1cm;

            % percorso singola onda
            path onda;
            onda := origin{up} .. (.7u,2u) — (1.5u,1.55u) .. (1u,0){down};

            % assemblaggio del pettine
            onda := onda — (2u, 0) — onda xshifted 2u;
            onda := onda — (4u, 0) — onda xshifted 4u;

            % disegno riempimento
            path inf;

            inf = buildcycle((-u,0)–onda–(8u,0)–(8u,-2u)–(-u,-2u)–cycle);

            fill inf withcolor 0.7white;

            draw onda;

            fill inf rotated 180 shifted (7u,3u) withcolor 0.4white;

            \stopMPpage`

            Ecco il pdf:
            [attachment=299]provafig2.pdf[/attachment]

            Il codice va compilato con ConTeXt mkiv, se ne disponi e ti funziona, altrimenti va compilato con mpost e trasformato in pdf.
            Un saluto.
            R.

            Attachments:
            You must be logged in to view attached files.
          • #74181
            Up
            0
            Down
            ::


            Ciao Roberto,

            intanto grazie mille!

            robitexIl codice va compilato con ConTeXt mkiv, se ne disponi e ti funziona, altrimenti va compilato con mpost e trasformato in pdf.

            La compilazione può essere fatta da terminale così?:

            context mkiv nomefile.tex

            o così?

            mpost nomefile.tex

            Devo dire che il risultato è molto buono. Purtroppo io non so nulla di [tt]METAPOST,[/tt] quindi non saprei modificare minimamente il tuo disegno. Insomma, potrei solo utilizzare il risultato così com’è. Piano piano sto imparando l’uso di [tt]TikZ,[/tt] e credo che lo userò nella tesi che (se tutto va bene) inizierò a breve. Con [tt]TikZ[/tt] ora sono riuscito a riprodurre quasi tutti i disegni più “complicati” che avevo fatto per la tesi di primo livello. Non so se mettermi a imparare anche qualche rudimento di [tt]METAPOST.[/tt] Comunque, grazie mille!

            Ciao e buona giornata,
            Marco.

            P.S. Rimango interessato a eventuali suggerimenti su quale potrebbe essere il mio approccio al mio disegno con [tt]TikZ,[/tt] e se sia possibile specchiare un disegno rispetto a un asse.

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

              Marco87″ post=73214Ciao Roberto,

              intanto grazie mille!

              Il codice va compilato con ConTeXt mkiv, se ne disponi e ti funziona, altrimenti va compilato con mpost e trasformato in pdf.

              La compilazione può essere fatta da terminale così?:

              context mkiv nomefile.tex

              o così?

              mpost nomefile.tex

              Devo dire che il risultato è molto buono. Purtroppo io non so nulla di [tt]METAPOST,[/tt] quindi non saprei modificare minimamente il tuo disegno. Insomma, potrei solo utilizzare il risultato così com’è. Piano piano sto imparando l’uso di [tt]TikZ,[/tt] e credo che lo userò nella tesi che (se tutto va bene) inizierò a breve. Con [tt]TikZ[/tt] ora sono riuscito a riprodurre quasi tutti i disegni più “complicati” che avevo fatto per la tesi di primo livello. Non so se mettermi a imparare anche qualche rudimento di [tt]METAPOST.[/tt] Comunque, grazie mille!

              Ciao e buona giornata,
              Marco.

              P.S. Rimango interessato a eventuali suggerimenti su quale potrebbe essere il mio approccio al mio disegno con [tt]TikZ,[/tt] e se sia possibile specchiare un disegno rispetto a un asse.

              Ciao,
              intanto non è poi così difficile comprendere il codice Metapost, anzi il disegno da ottenere è un buon esercizio.
              Il modo di definire path è essenzialmente lo stesso che in TikZ, poi, di nuovo ci sono i modi di manipolare un path assemblandolo, traslandolo, ruotandolo ecc.

              Con ConTeXt mkiv è molto comodo utilizzare Metapost (il comando di compilazione è context nomefile), perché in un solo passaggio si ottiene il disegno in pdf scontornato (le dimensioni della pagina sono quelle della figura).

              Nel modo tradizionale, si inserisce in codice Metapost in un file con qualche comando in più (la coppia beginfig() endfig per esempio), e si da il comando mpost nomefile, ma poi occorre cambiare formato.
              Un altro modo comodo tranne per il fatto che occorre dare l’opzione di compilazione -shell-escape, è utilizzare in LaTeX il pacchetto di Enrico chiamato gmp.

              Un saluto.
              R.

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

          Go to top