Re: L’arte di fare grafici di funzione con LaTeX

#74110
Liverpool
Partecipante
    Up
    0
    Down
    ::


    Riprendo il disegno del punto di vista per un aggiornamento. Con la collaborazione di Christian Feuersänger sono riuscito ad ottenere una sfumatura migliore per i due angoli utilizzando [tt]pgfplots[/tt] invece di [tt]TikZ[/tt]. In questo caso il problema rimane la realizzazione dell’occhio (che prima avveniva in 2d su un piano non parallelo allo schermo mentre qui deve avvenire in 3d). Pertanto posto il codice solo per completezza, perché mi sembra che il gioco non valga la candela.

    Ciao
    `\documentclass{standalone}
    \usepackage[T1]{fontenc}
    \usepackage[utf8]{inputenc}
    \usepackage[italian]{babel}
    \usepackage[sc]{mathpazo}
    \linespread{1.05}
    \usepackage{textcomp}
    \usepackage[dvipsnames]{xcolor}
    \definecolor{Coral}{rgb}{1,0.498,0.312}
    \usepackage{pgfplots}
    \pgfplotsset{compat=1.7}
    \usepgfplotslibrary{patchplots}

    \def\rar{0.2} % raggio degli archi orientati
    \def\azimut{80} % definizione dell'angolo di azimut nel sistema di pgfplots
    \def\el{40} % definizione dell'angolo di elevazione nel sistema ISO
    \pgfmathsetmacro{\az}{270+\azimut} % calcolo dell'azimut nel sistema ISO

    \begin{document}
    \begin{tikzpicture}
    % I numeri assegnati a x, y e z sono le componenti delle proiezioni dei versori dei tre assi sul quadro.
    \begin{axis} [width=13cm, scale only axis, axis on top, axis lines=center, axis line style=-latex,
    x={(0.94cm,-0.34cm)}, y={(0.766cm,0.643cm)}, z={(0cm,1cm)}, scale mode=scale uniformly,
    xmin=0, xmax=1, ymin=-1, ymax=0.9, zmin=0, zmax=1,
    xtick=\empty, ytick=\empty, ztick=\empty, xlabel={$x$}, ylabel={$y$}, zlabel={$z$},
    every axis x label/.style={at={(axis cs:\pgfkeysvalueof{/pgfplots/xmax},0,0)}, xshift=0.5em},
    every axis y label/.style={at={(axis cs:0,\pgfkeysvalueof{/pgfplots/ymax},0)}, shift={(-0.6em,0.7ex)}},
    every axis z label/.style={at={(axis cs:0,0,\pgfkeysvalueof{/pgfplots/zmax})}, xshift=-0.8em},
    ]

    % angolo di azimut
    \addplot3 [surf, shader=interp, colormap={dissolvenza}{color=(transparent!0) color=(Coral!50!Red)},
    patch type= bicubic, patch type sampling, samples=7,
    domain=-1:0, y domain=270:\az, variable=\t, point meta=t^2]
    ( {sqrt(1-t^2)*cos(y)}, {sqrt(1-t^2)*sin(y)}, {0} );

    % angolo di elevazione
    \addplot3 [surf, shader=interp, colormap={dissolvenza}{color=(transparent!0) color=(Cyan!50!RoyalBlue!60)},
    patch type= bicubic, patch type sampling, samples=5,
    domain=-1:0, y domain=0:\el, variable=\t, point meta=t^2]
    ( {sqrt(1-t^2)*cos(\az)*cos(y)}, {sqrt(1-t^2)*sin(\az)*cos(y)}, {sqrt(1-t^2)*sin(y)} );

    % asse visivo
    \addplot3 [gray, thick, samples=2, samples y=0, domain=0:1, variable=\t]
    ( {cos(\az)*cos(\el)*t}, {sin(\az)*cos(\el)*t}, {sin(\el)*t} );

    % prolungamento dell'asse visivo
    \addplot3 [gray, thick, dash pattern=on 5pt off 5pt, dash phase=5pt,
    samples=2, samples y=0, domain=1:1.3, variable=\t]
    ( {cos(\az)*cos(\el)*t}, {sin(\az)*cos(\el)*t}, {sin(\el)*t} );

    % proiezione dell'asse visivo
    \addplot3 [gray, dashed, thick, samples=2, samples y=0, domain=0:1, variable=\t]
    ( {cos(\az)*t}, {sin(\az)*t}, {0} );

    % arco orientato di azimut
    \addplot3 [-stealth, Maroon!20!Red, samples=30, samples y=0, domain=270:\az, variable=\t]
    ( {\rar*cos(t)}, {\rar*sin(t)}, {0} );

    % arco orientato di elevazione
    \addplot3 [-stealth, RoyalBlue!50!Blue, samples=30, samples y=0, domain=0:\el, variable=\t]
    ( {\rar*cos(\az)*cos(t)}, {\rar*sin(\az)*cos(t)}, {\rar*sin(t)} );

    % etichetta dell'azimut
    \addplot3 [Maroon!20!Red, mark=text, text mark=$\alpha$] coordinates
    {( {(\rar+0.1)*cos(270+\azimut/2)}, {(\rar+0.1)*sin(270+\azimut/2)}, {0} )};

    % etichetta dell'elevazione
    \addplot3 [RoyalBlue!50!Blue, mark=text, text mark=$\varepsilon$] coordinates
    {( {(\rar+0.1)*cos(\az)*cos(\el/2)}, {(\rar+0.1)*sin(\az)*cos(\el/2)}, {(\rar+0.1)*sin(\el/2)} )};
    \end{axis}
    \pgfresetboundingbox
    \path (-0.5,0.5) rectangle (5.5,6);
    \end{tikzpicture}
    \end{document}`

    [attachment=536]prova3.png[/attachment]

    Attachments:
    You must be logged in to view attached files.

    Go to top