
Ich bin Anfänger mit tikz-3dplot, ich möchte diese Figur zeichnen
Ich habe die Erklärung ausJohannes Kormylo,
\documentclass[tikz]{standalone}
\usepackage{tikz,tikz-3dplot}
\usetikzlibrary{patterns}% comme shading pour remplir une surface
\begin{document}
%\pgfmathsetmacro{\iAngle}{0}
\tdplotsetmaincoords{70}{110}
\foreach \iAngle in {1,10,...,360}
{
\begin{tikzpicture}[scale=5,tdplot_main_coords]
\coordinate (O) at (0,0,0);
\draw[thick,->] (O) -- (1.5,0,0) node[anchor=north]{$x$};
\draw[thick,->] (O) -- (0,1,0) node[anchor=west]{$y$};
\draw[thick,->] (O) -- (0,0,1) node[anchor=south]{$z$};
\draw[thick, opacity=0.3]
(0,0,0) -- (1.5,0,0) -- (1.5,1,0) -- (0,1,0) -- cycle;
\fill[pattern=dots,opacity=0.5]
(0,0,0) -- (1.5,0,0) -- (1.5,1,0) -- (0,1,0) -- cycle;
\fill[red,thick] (0,0,0.3) circle (0.3pt) node[left] {$O_1$};
\tdplotsetrotatedcoords{\iAngle}{0}{0}
\begin{scope}[tdplot_rotated_coords]
\draw[red,thick, ->]
(0.6,0,0.3) -- (1.5,0,0.3) node[above] {$x_1$};
\draw[red,thick, ->]
(0,0,0.3) -- (0,1,0.3) node[above] {$y_1$};
\draw[thick, dashed, opacity=1]
(0,0,0) -- (1.5,0,0);
\fill[blue,thick] (0.6,0,0.3) circle (0.3pt) node[above] {$A_1$};
\fill[blue,thick] (1.2,0,0.3) circle (0.3pt) node[above] {$A_2$};
\draw[pattern=north west lines, pattern color=blue, opacity=0.5 ] (0.6,0,0.3) circle (0.7);
\draw[pattern=north west lines, pattern color=green, opacity=0.5 ] (1.2,0,0.3) circle (0.7);
\draw[thick, dashed, opacity=1]
(0,0,0.3) -- (0.6,0,0.3);
\draw[thick, line, opacity=1]
(0.6,0,0.3) -- (1.2,0,0.3);
\end{scope}
\end{tikzpicture}
}
\end{document}
Ich habe die folgende Abbildung erhalten, die jedoch nicht vollständig ist.
wie kann ich die Hauptkoordinaten in der Animation fixieren?
wie fügt man Einheitsvektoren hinzu, die sich auf Scheiben beziehen?
welcher Winkel kann mir eine lustige Ansicht bieten?
kann mir jemand helfen, diese Arbeit zu erreichen
Antwort1
Ich habe das fehlerhafte line
Argument entfernt, eine Begrenzungsbox erstellt, sodass das Bild nicht springt, und – am wichtigsten – die Kreise orthogonal zu den Rotationsachsen gemacht.
\documentclass[tikz]{standalone}
\usepackage{tikz,tikz-3dplot}
\usetikzlibrary{patterns}% comme shading pour remplir une surface
\begin{document}
\pgfmathsetmacro{\RelativeSpeed}{0.3}
\tdplotsetmaincoords{70}{110}
\foreach \iAngle in {1,5,...,360}
{
\begin{tikzpicture}[scale=5,tdplot_main_coords]
\useasboundingbox[tdplot_screen_coords] (-1.8,-1) rectangle (1.4,1.4);
\coordinate (O) at (0,0,0);
\draw[thick,->] (O) -- (1.5,0,0) node[anchor=north]{$x$};
\draw[thick,->] (O) -- (0,1,0) node[anchor=west]{$y$};
\draw[thick,->] (O) -- (0,0,1) node[anchor=south]{$z$};
\draw[thick, opacity=0.3]
(0,0,0) -- (1.5,0,0) -- (1.5,1,0) -- (0,1,0) -- cycle;
\fill[pattern=dots,opacity=0.5]
(0,0,0) -- (1.5,0,0) -- (1.5,1,0) -- (0,1,0) -- cycle;
\fill[red,thick] (0,0,0.3) circle (0.3pt) node[left] {$O_1$};
\tdplotsetrotatedcoords{\iAngle}{00}{0}
\begin{scope}[tdplot_rotated_coords]
\draw[red,thick, ->]
(0.6,0,0.3) -- (1.5,0,0.3) node[above] {$x_1$};
\draw[red,thick, ->]
(0,0,0.3) -- (0,1,0.3) node[above] {$y_1$};
\draw[thick, dashed, opacity=1]
(0,0,0) -- (1.5,0,0);
\coordinate[label=above:$A_1$] (A1) at (0.6,0,0.3);
\coordinate[label=above:$A_2$] (A2) at (1.2,0,0.3);
\fill[blue,thick] (A1) circle (0.3pt);
\fill[blue,thick] (A2) circle (0.3pt);
\end{scope}
\tdplotsetrotatedcoords{\iAngle}{90}{0}
\begin{scope}[tdplot_rotated_coords]
\draw[pattern=north west lines, pattern color=blue, opacity=0.5 ] (A1) circle (0.7);
\draw[pattern=north west lines, pattern color=green, opacity=0.5 ] (A2) circle (0.7);
\pgfmathsetmacro{\jAngle}{\RelativeSpeed*\iAngle}
\draw[-latex,blue] (A1) -- ++({-0.7*cos(\jAngle)},{0.7*sin(\jAngle)},0)node[right]{$y_1'$};
\draw[-latex,blue] (A1) -- ++({0.7*sin(\jAngle)},{0.7*cos(\jAngle)},0)node[right]{$x_1'$};
\draw[-latex,green] (A2) -- ++(-0.7,0,0)node[right]{$y_2'$};
\draw[-latex,green] (A2) -- ++(0,0.7,0)node[right]{$x_2'$};
\end{scope}
\tdplotsetrotatedcoords{\iAngle}{00}{0}
\begin{scope}[tdplot_rotated_coords]
\draw[thick, dashed, opacity=1]
(0,0,0.3) -- (0.6,0,0.3);
\draw[thick, -, opacity=1]
(0.6,0,0.3) -- (1.2,0,0.3);
\end{scope}
\end{tikzpicture}
}
\end{document}
AKTUALISIEREN: Ich hoffe, ich konnte Ihre Wünsche erfüllen. In dieser Version rotiert der blaue Rahmen mit 30 % der Geschwindigkeit des großen Rahmens. Die relative Geschwindigkeit wird durch den Parameter festgelegt \RelativeSpeed
. Sie können denselben Trick verwenden, um den grünen Rahmen zu rotieren, oder ihn mit einer anderen Geschwindigkeit rotieren lassen. Eigentlich ist das Schreiben des Codes ziemlich unkompliziert, ich habe jedoch Probleme, das PDF in ein animiertes GIF umzuwandeln. (Warum ist das so kompliziert? Warum dauert es so lange?) Daher würde ich gern einen effizienteren Weg lernen, dies zu tun.