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

#73978
Up
0
Down
::


Io non capisco quasi nulla di disegni 3D, ma non abbondenerei il pacchetto. Certo, si potrebbe realizzare tutto solo con TIkZ, ma dovresti lavorare definendoti tutte le coordinate sferiche con:

`
\coordinate (nome) at (1,1,1);
`

Ho pensato di dare un piccolissimo contributo aggiungendo qualche ombreggiatura ;): sicuramente il codice che ho inserito è migliorabile, ma credo possa dare un’idea di come usare comandi TikZ in questo caso (in riferimento alla domanda di @Liverpool). Inserisco l’esempio minimo così che sia compilabile facilmente:

`
\documentclass[a4paper]{article}
\usepackage{tikz,tikz-3dplot}
\usepackage[osf,sc]{mathpazo}

\usetikzlibrary{arrows}
\usetikzlibrary{backgrounds}
\usetikzlibrary{calc}
\usetikzlibrary{intersections}
\usetikzlibrary{positioning}
\usetikzlibrary{shadows}
\usetikzlibrary{shapes}
\usetikzlibrary{through}
\usetikzlibrary{shadings}

\pgfarrowsdeclare{freccia45}{freccia45}
{
\pgfmathsetlengthmacro{\rex}{\pgfgetarrowoptions{freccia45}+1.28\pgflinewidth}
\pgfarrowsleftextend{0pt}
\pgfarrowsrightextend{\rex}
}
{
\pgfmathsetlengthmacro{\lun}{\pgfgetarrowoptions{freccia45}/cos(22.5)}
\pgfsetdash{}{+0pt}
\pgfsetmiterjoin
\pgfpathmoveto{\pgfpointadd{\pgfqpoint{\pgfgetarrowoptions{freccia45}}{0pt}}{\pgfqpointpolar{157.5}{\lun}}}
\pgfpathlineto{\pgfqpoint{\pgfgetarrowoptions{freccia45}}{0pt}}
\pgfpathlineto{\pgfpointadd{\pgfqpoint{\pgfgetarrowoptions{freccia45}}{0pt}}{\pgfqpointpolar{-157.5}{\lun}}}
\pgfpathclose
\pgfusepathqstroke
}
\def\miodef{3.5pt} % imposta il valore utilizzato per default
\pgfsetarrowoptions{freccia45}{\miodef} % valore utilizzato se /punta non viene invocato
\pgfkeys{/punta/.default=\miodef, /punta/.code={\pgfsetarrowoptions{freccia45}{#1}}}
\begin{document}
\centering
\tdplotsetmaincoords{70}{110}
\begin{tikzpicture}[tdplot_main_coords,scale=1.5]
%origine
\coordinate (o) at (0,0,0);

%asse x
\coordinate [label=0:$x$] (x) at (0,5.5,0);
\draw [thick,-stealth'] (o) — (x);
%asse y
\coordinate [label=70:$y$] (y) at (-4.5,0,0);
\coordinate (yneg) at (4.5,0,0);
\draw [thick,-stealth'] (o) — (y);
%tratto y<0
\draw [thick] (o) — (yneg);
%asse z
\coordinate [label=above:$z$] (z) at (0,0,3);
\draw [thick,-stealth'] (o) — (z);

%segmento piano xy
\fill [left color=gray!30,right color=white,opacity=.75] (o) — (3,4.5,0) — +(0,0,3) — (o);
\draw (3,4.5,0) — (o) — ($(3,4.5,0)+(0,0,3)$);
%\draw (o) — (3,4.5,0) — +(0,0,3) — (o);

%elevazione
\tdplotgetpolarcoords{1}{1}{1}
\tdplotsetthetaplanecoords{56.310}
\tdplotdrawarc[tdplot_rotated_coords,-freccia45,blue!85]{(o)}{2.1}{90}{60.983}{anchor=south west}{elevazione}

%azimuth
\tdplotdrawarc[-freccia45,red!85]{(o)}{1.5}{0}{56.310}{anchor=north,name=azimut}{azimut}

% coloring
\begin{pgfonlayer}{background}
\shade[top color=red!50,bottom color=white](o)–(0.625,-0.3,-0.33)–($(azimut.north east)+(-0.33,0.15,0)$);
\end{pgfonlayer}

%viewpoint
\def\dista{6}
\def\distb{5}
\def\tana{2/3}
\coordinate (cen) at (\dista*\tana,\dista,\dista*\tana);
\coordinate (sup) at ($(cen)+(canvas polar cs:radius=.75cm,angle=180)$);
\coordinate (inf) at ($(cen)+(canvas polar cs:radius=.75cm,angle=225)$);
\coordinate (pupilla) at ($(cen)+(canvas polar cs:radius=.475cm,angle=202.5)$);

%\draw [rotate around={22.5:(\dista*\tana,\dista,\dista*\tana)}] (cen) — (\distb*\tana,\distb,\distb*\tana);
%\draw [rotate around={-22.5:(\dista*\tana,\dista,\dista*\tana)}] (cen) — (\distb*\tana,\distb,\distb*\tana);

\draw (inf) — (cen) — (sup);

\tdplotgetpolarcoords{1}{1}{1}
\tdplotsetthetaplanecoords{123.690}
\tdplotdrawarc[tdplot_rotated_coords]{(cen)}{.5}{226.5}{275}{anchor=west}{}

\fill [black] (pupilla) circle (.025cm);
\end{tikzpicture}

\end{document}
`

Risultato grafico:

[attachment=330]Immagine_2012-06-03.png[/attachment]

P.S. A me non piace molto l’angolo dell’arco elevazione: è possibile o spostare il punto di arrivo della freccia verso destra o aumentare l’angolo di curvatura?

Ciao
Claudio

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

Go to top