OldClaudio” post=98972Disegnando anche i paralleli, cosa che ritengo utilissima, il disegno risulta un po’ confuso se si vedono le linee sul retro della sfera; lo so che è difficile, ma si possono elininare gli archi posteriori di meridiani e paralleli?
Tratteggiare o nascondere le parti visibili non è banale, soprattutto se si vuole realizzare una soluzione che vada bene con qualunque sistema di riferimento (leggi proiezione). In tal caso, magari per pigrizia, credo che la soluzione più semplice sia appoggiarsi all’opzione [tt]surf[/tt] di pgfplots per disegnare la sfera. Lo svantaggio è che gli archi saranno solo approssimati sul reticolo.
`\documentclass
{standalone}
\usepackage{pgfplots}
\pgfplotsset{compat=1.11}
% componenti dei versori degli assi coordinati
% rispetto alla base della tela
\pgfmathsetlengthmacro{\xx}{-1cm*sqrt(3)/2}
\pgfmathsetlengthmacro{\xy}{-0.5cm}
\pgfmathsetlengthmacro{\yx}{1cm*sqrt(3)/2}
\pgfmathsetlengthmacro{\yy}{-0.5cm}
\pgfmathsetlengthmacro{\zx}{0cm}
\pgfmathsetlengthmacro{\zy}{1cm}
\tikzset{
latA/.initial=0,
lonA/.initial=0,
latB/.initial=0,
lonB/.initial=0,
partenza/.style 2 args={latA=#1, lonA=#2},
arrivo/.style 2 args={latB=#1, lonB=#2},
posizione/.style 2 args={latA=#1, lonA=#2},
raggio/.initial=1,
raggio/.code={\tikzset{/tikz/scale=#1}},
lungo/.initial=0,
opposto/.code={\tikzset{/tikz/lungo=1}},
ortodromia/.pic={
% conversione delle coordinate geografiche in cartesiane
\pgfmathsetmacro{\Ax}{cos(\pgfkeysvalueof{/tikz/latA})*cos(\pgfkeysvalueof{/tikz/lonA})}
\pgfmathsetmacro{\Ay}{cos(\pgfkeysvalueof{/tikz/latA})*sin(\pgfkeysvalueof{/tikz/lonA})}
\pgfmathsetmacro{\Az}{sin(\pgfkeysvalueof{/tikz/latA})}
\pgfmathsetmacro{\Bx}{cos(\pgfkeysvalueof{/tikz/latB})*cos(\pgfkeysvalueof{/tikz/lonB})}
\pgfmathsetmacro{\By}{cos(\pgfkeysvalueof{/tikz/latB})*sin(\pgfkeysvalueof{/tikz/lonB})}
\pgfmathsetmacro{\Bz}{sin(\pgfkeysvalueof{/tikz/latB})}
% prodotto scalare (OA\cdot OB)
\pgfmathsetmacro{\ps}{\Ax*\Bx + \Ay*\By + \Az*\Bz}
% vettore OP complanare con OA e OB e ortogonale al primo
\pgfmathsetmacro{\Px}{-\Ax*\ps + \Bx}
\pgfmathsetmacro{\Py}{-\Ay*\ps + \By}
\pgfmathsetmacro{\Pz}{-\Az*\ps + \Bz}
% versore CP parallelo a OP
\pgfmathsetmacro{\Cx}{\Px/sqrt((\Px)^2 + (\Py)^2 + (\Pz)^2)}
\pgfmathsetmacro{\Cy}{\Py/sqrt((\Px)^2 + (\Py)^2 + (\Pz)^2)}
\pgfmathsetmacro{\Cz}{\Pz/sqrt((\Px)^2 + (\Py)^2 + (\Pz)^2)}
% angolo tra i due vettori OA e OB
\pgfmathsetmacro{\angolo}{acos(\ps)-360*\pgfkeysvalueof{/tikz/lungo}}
\draw [x={(\Ax*\xx+\Ay*\yx+\Az*\zx, \Ax*\xy+\Ay*\yy+\Az*\zy)},
y={(\Cx*\xx+\Cy*\yx+\Cz*\zx, \Cx*\xy+\Cy*\yy+\Cz*\zy)}, pic actions]
(1,0,0) arc (0:\angolo:1);
},
coordinata/.pic={
\pgftransformshift{
\pgfpointspherical{90-\pgfkeysvalueof{/tikz/lonA}}{\pgfkeysvalueof{/tikz/latA}}{1}
}
\pgfnode{coordinate}{center}{}{#1}{}
}
}
\begin{document}
\begin{tikzpicture}
\begin{axis} [x={(\xx,\xy)}, y={(\yx,\yy)}, z={(\zx,\zy)},
anchor=origin, at={(0,0)}, disabledatascaling, hide axis]
% disegna la sfera con i meridiani e paralleli
\addplot3 [surf, z buffer=sort, fill opacity=0.6, white, faceted color=blue!40, very thin,
samples=19, samples y=37, variable=\u, variable y=\v,
domain=0:180, y domain=0:360]
({cos(u)*sin(v)}, {sin(u)*sin(v)}, {cos(v)});
% disegna l'arco
\pic [partenza={30}{-50}, arrivo={30}{90}, red] {ortodromia};
\pic [posizione={30}{-50}] {coordinata=A};
\pic [posizione={30}{90}] {coordinata=B};
\fill (A) circle (0.8pt)
(B) circle (0.8pt);
% assi coordinati
\draw [-latex] (1,0,0) — (2,0,0);
\draw [-latex] (0,1,0) — (0,2,0);
\draw [-latex] (0,0,1) — (0,0,2);
\end{axis}
\end{tikzpicture}
\end{document}`
[attachment=1234]ortodromia1.png[/attachment]