
Estoy intentando dibujar una media esfera con varias flechas. Cada una de esas flechas debe tener un círculo colocado sobre ella, dibujado en un sistema de coordenadas local de la flecha. Logré dibujar la esfera y las flechas, pero no logro lograr la perspectiva del círculo correctamente.
¿Alguna sugerencia?
\documentclass[11pt]{article}
\usepackage{tikz}
\usepackage{tikz-3dplot}
\usepackage{verbatim}
\usepackage[active,tightpage]{preview}
\PreviewEnvironment{tikzpicture}
\setlength\PreviewBorder{5pt}%
%: isometric South West : X , South East : Y , North : Z
\tikzset{isometricXYZ/.style={x={(-0.866cm,-0.5cm)}, y={(0.866cm,-0.5cm)}, z={(0cm,1cm)}}}
%% document-wide tikz options and styles
\begin{document}
\begin{tikzpicture} [scale=4, isometricXYZ, line join=round,
opacity=.75, text opacity=1.0,%
>=latex,
inner sep=0pt,%
outer sep=2pt,%
]
\def\h{5}
\newcommand{\quadrant}[2]{
\foreach \f in {85,75,...,5}
\foreach \t in {#1}
\draw [dotted, fill=#2]
({sin(\f - \h)*cos(\t - \h)}, {sin(\f - \h)*sin(\t - \h)}, {cos(\f - \h)})
-- ({sin(\f - \h)*cos(\t + \h)}, {sin(\f - \h)*sin(\t + \h)}, {cos(\f - \h)})
-- ({sin(\f + \h)*cos(\t + \h)}, {sin(\f + \h)*sin(\t + \h)}, {cos(\f + \h)})
-- ({sin(\f + \h)*cos(\t - \h)}, {sin(\f + \h)*sin(\t - \h)}, {cos(\f + \h)})
-- cycle;
}
%Quadrants
\quadrant{130,140,...,310}{gray!2}
\quadrant{-50,-40,...,130}{gray!2}
%View arrows
\def\l{1.15}
\foreach \f in {0,10,...,90}
\foreach \t in {95}
\draw [black, ->, thick]
({\l*sin(\f)*cos(\t)},{\l*sin(\f)*sin(\t)},{\l*cos(\f)})
-- ({sin(\f)*cos(\t)},{sin(\f)*sin(\t)},{cos(\f)});
% Circles in local coordinate system of the arrows
\foreach \f in {0,10,...,90}
\foreach \t in {95}
{
\def\PosX{{\l*sin(\f)*cos(\t)}}
\def\PosY{{\l*sin(\f)*sin(\t)}}
\def\PosZ{{\l*cos(\f)}}
\def\Pos{(\PosX, \PosY, \PosZ)}
\begin{scope}[rotate around={\f:\Pos}]
\draw[->,red,thick] \Pos circle (0.07);
\end{scope}
};
\end{tikzpicture}
\end{document}
Resultado actual. Los círculos dibujados no se ven bien en un cajero automático.
Respuesta1
Al final escribí una matriz de transformación y transformé manualmente los puntos.
\documentclass[11pt]{article}
\usepackage{tikz}
\usepackage{tikz-3dplot}
%%%<
\usepackage{verbatim}
\usepackage[active,tightpage]{preview}
\PreviewEnvironment{tikzpicture}
\setlength\PreviewBorder{5pt}%
%%%>
\tikzset{isometricXYZ/.style={x={(-0.866cm,-0.5cm)}, y={(0.866cm,-0.5cm)}, z={(0cm,1cm)}}}
%% document-wide tikz options and styles
\begin{document}
\begin{tikzpicture} [scale=4, isometricXYZ, line join=round,
opacity=.75, text opacity=1.0,%
>=latex,
inner sep=0pt,%
outer sep=2pt,%
]
\def\h{5}
\newcommand{\quadrant}[2]{
\foreach \f in {85,75,...,5}
\foreach \t in {#1}
\draw [dotted, fill=#2]
({sin(\f - \h)*cos(\t - \h)}, {sin(\f - \h)*sin(\t - \h)}, {cos(\f - \h)})
-- ({sin(\f - \h)*cos(\t + \h)}, {sin(\f - \h)*sin(\t + \h)}, {cos(\f - \h)})
-- ({sin(\f + \h)*cos(\t + \h)}, {sin(\f + \h)*sin(\t + \h)}, {cos(\f + \h)})
-- ({sin(\f + \h)*cos(\t - \h)}, {sin(\f + \h)*sin(\t - \h)}, {cos(\f + \h)})
-- cycle;
}
\newcommand{\arrowarc}[6]{
\draw[domain=0:320,smooth,variable=\x,->, dashed] plot
({0.07 * (cos(#2)*cos(#3) * cos(\x) + (cos(#3)*sin(#1)*sin(#2) - cos(#1)*sin(#3)) * sin(\x)) + #4},
{0.07 * (cos(#2)*sin(#3) * cos(\x) + (cos(#1)*cos(#3) + sin(#1)*sin(#2)*sin(#3)) * sin(\x)) + #5},
{0.07 * (-sin(#2) * cos(\x) + cos(#2)*sin(#1)* sin(\x)) + #6});
}
%Quadrants
\quadrant{130,140,...,310}{gray!2}
\quadrant{-50,-40,...,130}{gray!2}
\foreach \f in {20,30,...,90}
\foreach \t in {-40,-20,...,120}
{
%Movement arrows
\def\l{1.15}
\draw [black, ->, thick]
({\l*sin(\f)*cos(\t)},{\l*sin(\f)*sin(\t)},{\l*cos(\f)})
-- ({sin(\f)*cos(\t)},{sin(\f)*sin(\t)},{cos(\f)});
% Circles
\def\l{1.12}
\arrowarc{(\f)}{0}{(\t + 90)}{\l*sin(\f)*cos(\t)}{\l*sin(\f)*sin(\t)}{\l*cos(\f)}
};
\end{tikzpicture}
\end{document}][1]