
Ich versuche, eine Halbkugel mit mehreren Pfeilen darauf zu zeichnen. Auf jedem dieser Pfeile sollte ein Kreis positioniert sein, der in einem lokalen Koordinatensystem des Pfeils gezeichnet ist. Ich habe es geschafft, die Kugel und die Pfeile zu zeichnen, aber ich bekomme die Kreisperspektive nicht richtig hin.
Irgendwelche Vorschläge?
\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}
Aktuelles Ergebnis. Die gezeichneten Kreise sehen momentan nicht richtig aus.
Antwort1
Am Ende habe ich eine Transformationsmatrix geschrieben und die Punkte manuell transformiert.
\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]