Ellisse con TikZ

  • Creatore
    Topic
  • #75607
    Up
    0
    Down
    ::


    Ciao a tutti,

    torno con una domanda che riguarda il pacchetto [tt]TikZ.[/tt] Vorrei fare il seguente disegno:

    Ho provato a iniziare con 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{automata}
    \usetikzlibrary{arrows}
    \usetikzlibrary{backgrounds}
    \usetikzlibrary{calc}
    \usetikzlibrary{decorations.pathmorphing}
    \usetikzlibrary{decorations.markings}
    \usetikzlibrary{intersections}
    \usetikzlibrary{positioning}
    \usetikzlibrary{shadows}
    \usetikzlibrary{shapes}
    \usetikzlibrary{through}
    \usepackage{tkz-euclide}
    \usetkzobj{all}

    \usepackage{tikz-3dplot}

    \begin{document}

    \thispagestyle{empty}
    \begin{figure}[tb]
    \centering
    \tikzfading[name=fade inside,inner color=transparent!70,outer color=transparent!30]
    \definecolor{giallo}{rgb}{.870,.900,.150}
    \begin{tikzpicture}
    \shade [ball color=grigio,path fading=fade inside] (2,2) circle (.75);
    \end{tikzpicture}
    \end{figure}

    \end{document}`
    ma non saprei proprio come realizzare l’ellisse così come compare in figura. Il modo con cui si possono tracciare archi con [tt]TikZ[/tt] non mi piace molto: non è possibile farlo specificando semplicemente centro, raggio e angoli di partenza e di arrivo. Ci sarebbe il pacchetto [tt]tkz-euclide,[/tt] ma non ho trovato nulla che permetta di fare ellissi. Insomma, non so come risolvere questo problema. Qualcuno sa come farlo?

    Grazie e buona giornata,
    Marco.

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

      Marco87″ post=74757Ciao a tutti,

      torno con una domanda che riguarda il pacchetto [tt]TikZ.[/tt] Vorrei fare il seguente disegno:

      [attachment:1]C:\fakepath\ellisseMarco87.jpg[/attachment]

      Ho provato a iniziare con 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{automata}
      \usetikzlibrary{arrows}
      \usetikzlibrary{backgrounds}
      \usetikzlibrary{calc}
      \usetikzlibrary{decorations.pathmorphing}
      \usetikzlibrary{decorations.markings}
      \usetikzlibrary{intersections}
      \usetikzlibrary{positioning}
      \usetikzlibrary{shadows}
      \usetikzlibrary{shapes}
      \usetikzlibrary{through}
      \usepackage{tkz-euclide}
      \usetkzobj{all}

      \usepackage{tikz-3dplot}

      \begin{document}

      \thispagestyle{empty}
      \begin{figure}[tb]
      \centering
      \tikzfading[name=fade inside,inner color=transparent!70,outer color=transparent!30]
      \definecolor{giallo}{rgb}{.870,.900,.150}
      \begin{tikzpicture}
      \shade [ball color=grigio,path fading=fade inside] (2,2) circle (.75);
      \end{tikzpicture}
      \end{figure}

      \end{document}`
      ma non saprei proprio come realizzare l’ellisse così come compare in figura. Il modo con cui si possono tracciare archi con [tt]TikZ[/tt] non mi piace molto: non è possibile farlo specificando semplicemente centro, raggio e angoli di partenza e di arrivo. Ci sarebbe il pacchetto [tt]tkz-euclide,[/tt] ma non ho trovato nulla che permetta di fare ellissi. Insomma, non so come risolvere questo problema. Qualcuno sa come farlo?

      Grazie e buona giornata,
      Marco.

      Temo l’allegato non sia stato caricato. In ogni caso in TikZ esiste la parola chiave [tt]ellipse[/tt]. Ti allego il codice di un esempio in cui la uso con qualche prova di shading 😉

      `
      \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{automata}
      \usetikzlibrary{arrows}
      \usetikzlibrary{backgrounds}
      \usetikzlibrary{calc}
      \usetikzlibrary{decorations.pathmorphing}
      \usetikzlibrary{decorations.markings}
      \usetikzlibrary{intersections}
      \usetikzlibrary{positioning}
      \usetikzlibrary{shadows}
      \usetikzlibrary{shapes}
      \usetikzlibrary{through}
      \usepackage{tkz-euclide}
      \usetkzobj{all}

      \usepackage{tikz-3dplot}

      \makeatletter
      \pgfdeclareradialshading[tikz@ball]{ball}{\pgfqpoint{5bp}{10bp}}{%
      color(0bp)=(tikz@ball!30!white);
      color(9bp)=(tikz@ball!75!white);
      color(18bp)=(tikz@ball!90!black);
      color(25bp)=(tikz@ball!70!black);
      color(50bp)=(black)}

      \pgfdeclareradialshading{ellipse}{\pgfqpoint{-5bp}{10bp}}{%
      color(0bp)=(red!30!white);
      color(9bp)=(red!75!white);
      color(18bp)=(white!90!red);
      color(25bp)=(white!70!red);
      color(50bp)=(red)}

      \pgfdeclareradialshading[tikz@ball]{myball}{\pgfqpoint{5bp}{-5bp}}{%
      color(0bp)=(tikz@ball!30!white);
      color(15bp)=(tikz@ball!75!white);
      color(25bp)=(tikz@ball!90!black);
      color(40bp)=(tikz@ball!70!black);
      color(70bp)=(black)}

      \makeatother

      \begin{document}
      \thispagestyle{empty}
      \begin{figure}
      \centering
      \begin{tikzpicture}
      \shade [ball color=green!60!black] (0,2) ellipse [x radius=2cm,y radius=1cm];
      \shade [shading=ellipse] (4,2) ellipse [x radius=2cm,y radius=1cm];
      \shade [shading=myball] (2,0) ellipse [x radius=2cm,y radius=1cm];
      \end{tikzpicture}
      \end{figure}

      \end{document}
      `

      Ciao
      Claudio

    • #75609
      Up
      0
      Down
      ::


      Ciao Claudio,

      grazie mille della risposta! Finalmente sono riuscito a inserire la figura (nel primo messaggio). Mentre è piuttosto semplice gestire un’ellisse completa, non lo è affatto gestire un arco di ellisse (almeno per me). Mi chiedo perché non sia prevista la possibilità di tracciarlo specificando il centro, i raggi, l’angolo di partenza e l’angolo di arrivo. Se potessi, mi piacerebbe chiederlo all’autore del pacchetto, peraltro molto bello.

      Ora spero che si capisca che cosa vorrei disegnare. Spero che sia possibile!

      Grazie e buona giornata,
      Marco.

      P.S. Nel disegno della sfera vi è un salto nella colorazione, e in alto a destra vi è una porzione esterna alla sfera colorata di grigio. In realtà non dovrebbero esserci. Non so cosa sia successo nei vari cambi di formato della figura.

    • #75610
      OldClaudio
      Partecipante
        Up
        0
        Down
        ::


        Mah, i comandi che stai cercando non sono quelli descritti nella sezione 71.6, pagine 741 e seguenti nella guida di Tikz?

      • #75611
        Up
        0
        Down
        ::


        Io ho fatto un piccolo tentativo e ho prodotto:

        [attachment=368]Immagine_2012-06-29.jpg[/attachment]

        Ecco il codice:

        `
        \documentclass[a4paper,11pt]{article}
        \usepackage{tikz}

        % change sphere shading
        \makeatletter
        \pgfdeclareradialshading[tikz@ball]{ball}{\pgfqpoint{5bp}{10bp}}{%
        color(0bp)=(tikz@ball!30!white);
        color(9bp)=(tikz@ball!75!white);
        color(18bp)=(tikz@ball!90!black);
        color(25bp)=(tikz@ball!70!black);
        color(50bp)=(black)}
        \makeatother

        \begin{document}
        \tikzset{
        MyPersp/.style={scale=1.8,x={(-0.8cm,-0.4cm)},y={(0.8cm,-0.4cm)},
        z={(0cm,1cm)}}}

        \thispagestyle{empty}
        \begin{figure}[tb]
        \centering
        \begin{tikzpicture}[MyPersp]
        \def\h{-1.53}% Heigth of the ellipse center (on the axis of the cylinder)
        \def\a{40}% angle of the section plane with the horizontal
        \pgfmathparse{\h/tan(\a)}
        \let\b\pgfmathresult
        \pgfmathparse{sqrt(1/cos(\a)/cos(\a)-1)}
        \let\c\pgfmathresult %Center Focus distance of the section ellipse.

        % Sphere
        \shade [ball color=orange] (1.9,2) circle (1.2cm);
        % Ellipse
        \draw[blue!40,draw=blue,very thick,opacity=0.5]
        (-0.91,0.5,{\h-tan(\a)}) % elliptical section
        \foreach \t in {-45,-40,…,225}
        {–({sin(\t)},{cos(\t)},{-tan(\a)*cos(\t)+\h})};
        \end{tikzpicture}
        \end{figure}

        \end{document}
        `
        Alcuni comandi sono presi da http://www.texample.net/tikz/examples/dandelin-spheres/. Il “guaio” è che il disegno è fatto ad hoc: per creare più ellissi è necessario sia cambiare le definizioni di [tt]\h[/tt] ed [tt]\a[/tt] che l’angolo di inizio e fine ellisse (nel mio esempio da [tt]-45, 225[/tt]) più la corrispondente coordinata ([tt]-0.91[/tt]).

        Per dirla tutta, l’approccio funziona, ma sulla sua validità non scommetto molto.

        Ciao
        Claudio

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


        Ciao,


        @OldClaudio
        : intanto grazie delle indicazioni. 🙂 Sì, nella sezione 71.6 si parla dei percorsi ellittici, ma con quei comandi trovo una grande difficoltà a realizzare il disegno che ho mostrato. La documentazione che ho io di [tt]TikZ[/tt] ha 726 pagine.


        @cfiandra
        : grazie mille. 🙂 Ora proverò a cimentarmi nella comprensione (e modifica) del codice che hai scritto. Appena ottengo il risultato che desidero, farò avere mie notizie. 😀

        Grazie ancora e buona giornata,
        Marco.

      • #75613
        Liverpool
        Partecipante
          Up
          0
          Down
          ::


          Premessa: i colori di @cfiandra sono sempre bellissimi. Quasi quasi proporrei a Tommaso di sostituire il rosso del disegno di view con il tuo arancione…

          Io ho pensato ad una soluzione grossolana: usare [tt]clip[/tt] tagliando un semicerchio. Per evitare di calcolarmi gli angoli di partenza e arrivo del taglio, ho fatto tutto il disegno in orizzontale e l’ho successivamente ruotato e traslato con uno [tt]scope[/tt]. Ho dovuto aggiungere un cerchio bianco dietro al disegno, perché tu hai scelto una semitrasparenza, che avrebbe svelato il retro dell’ellisse. Sinceramente non ho capito a che ti serva quella semitrasparenza, dal momento che lo sfondo è bianco…
          `\begin{tikzpicture}
          \begin{scope} [shift={(2,2)}, rotate=-50]
          \draw [giallo, line width=3pt] (0,0) ellipse (1 and 0.5);
          \fill [white] (0,0) circle (0.75);
          \shade [ball color=grigio, path fading=fade inside] (0,0) circle (0.75);
          \clip (0.76,0) arc (0:-180:0.76);
          \draw [giallo, line width=3pt] (0,0) ellipse (1 and 0.5);
          \end{scope}
          \end{tikzpicture}`

          Domanda per gli esperti: quando uso un comando come [tt]clip[/tt], i dati relativi ai punti nascosti del disegno vengono memorizzati comunque nel pdf?

          Ciao

        • #75614
          Up
          0
          Down
          ::


          Ciao Luigi,

          grazie anche a te! 🙂 Devo dire che il risultato della tua soluzione è molto bello, soprattutto perché là dove inizia e dove finisce l’ellisse, è rifinito meglio.

          Grazie e ciao,
          Marco.

        • #75615
          Up
          0
          Down
          ::

          Liverpool” post=74773Premessa: i colori di @cfiandra sono sempre bellissimi. Quasi quasi proporrei a Tommaso di sostituire il rosso del disegno di view con il tuo arancione…

          Grazie: forse quello che risalta è l’ombreggiatura diversa (stavo facendo un po’ di prove).. l’arancione e il blu sono quelli standard di xcolor 😉

          Ciao
          Claudio

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

      Go to top