Wie kann ich mit TikZ zwei rollende Kreise zeichnen?

Wie kann ich mit TikZ zwei rollende Kreise zeichnen?

Ich habe versucht, das Bild links zu zeichnen, aber bei dem Bild rechts konnte ich nichts machen.

Es scheint im Bereich der Zahnradübertragung tätig zu sein.

Es wäre toll, wenn ein warmherziger Freund eine Animation machen könnte.

Bildbeschreibung hier eingeben

\documentclass[tikz,border=3mm]{standalone}
\usepackage{tikz-cd}
\usetikzlibrary{calc}
\usetikzlibrary{patterns,patterns.meta,decorations.pathmorphing}

\begin{document}
\begin{tikzpicture}
\draw (0,1) circle [radius=1];
\draw (0,3) circle [radius=1];
\draw[-stealth] (-0.65,1.3) arc (-200:-260:0.6);
\draw[-stealth] (-0.65,2.7) arc (200:260:0.6);
\draw[{Circle[open, length=1mm]}-Stealth] (0,1) -- (0,0);
\draw[{Circle[open, length=1mm]}-Stealth] (0,3) -- (0,2);
\path[pattern={Lines[angle=45,distance={4pt/sqrt(2)}]}] (-1.5,0) edge[thick] ++(3,0) 
rectangle ++ (3,-0.2);
\end{tikzpicture}
\end{document}

Bildbeschreibung hier eingeben

Antwort1

Kompilieren mitAsymptote.

Bild 1

unitsize(1cm);
import patterns;

path c1=circle((0,1),1),c2=circle((0,3),1);
path arc1=arc((0,1),0.7,-200,-250);
path arc2=arc((0,3),0.7,200,250);

draw(c1^^c2);
draw(arc1,Arrow(size=3));
draw(arc2,Arrow(size=3));
draw((0,1)--(0,0),Arrow());
dot((0,1),FillDraw(white));
draw((0,3)--(0,2),Arrow());
dot((0,3),FillDraw(white));

add("yourpattern",hatch(2mm,dir(45)));
fill(box((-1.5,-0.2),(1.5,0)),pattern("yourpattern"));
draw((-1.5,0)--(1.5,0),0.7bp+black);
shipout(bbox(2mm,invisible));

Bildbeschreibung hier eingeben

Bild 2

unitsize(1cm);
import patterns;
import graph;
path c1=circle((0,1),1),c2=circle((0,3),1);

draw(c1^^c2);

draw((0,1)--(0,1)+dir(-150),Arrow); 
draw((0,3)--(0,3)+dir(-30),Arrow); 
dot((0,1),FillDraw(white));
dot((0,3),FillDraw(white));

path arc1=arc((0,1),1,210,270), arc2=arc((0,1),1,30,90), arc3=arc((0,3),1,270,330);
path line1=(0,0)--(-length(arc1),0);

add("yourpattern",hatch(2mm,dir(45)));
fill(box((-1.5,-0.2),(1.5,0)),pattern("yourpattern"));
draw((-1.5,0)--(1.5,0),0.6bp+black);
draw(arc1^^line1,0.8bp+red);
draw(arc2^^arc3,0.8bp+blue);
shipout(bbox(2mm,invisible));

Bildbeschreibung hier eingeben

Animation. (SCHLECHTER CODE)

import animate;
import patterns;
settings.tex="pdflatex"; 

animation Ani;
unitsize(1cm);
real t=6.284; // arclength(circle((0,1),1))=6.28406679229544
for(real a=0.0; a <= t; a=a+t/50)
{
save();
draw(circle((0+a,1),1)^^circle((0+a,3),1));

draw((0+a,1)--(0+a,1)+dir(-90-a*180/pi),Arrow());
draw((0+a,1)--(0+a,1)+dir(180+-90-a*180/pi),dashed+blue); 
draw((0+a,3)--(0+a,3)+dir(-90+a*180/pi),Arrow());
dot((0+a,1),FillDraw(white));
dot((0+a,3),FillDraw(white));

// L=alpha*pi*r/180 (wikipedia)

path arc1=(a != 0.0) ? arc((0+a,1),1,-90,-90-a*180/pi) : nullpath, // r=1
     arc2=(a != 0.0) ? arc((0+a,1),1,90,90-a*180/pi) : nullpath,
     arc3=(a != 0.0) ? arc((0+a,3),1,-90,-90+a*180/pi) : nullpath;
path line1=(a != 0.0) ? (0,0)--(a,0) : nullpath;

add("yourpattern",hatch(2mm,dir(45)));
fill(box((-1,-0.2),(1+t,0)),pattern("yourpattern"));
draw((-1,0)--(1+t,0),0.6bp+black);
draw(arc2^^arc3,0.8bp+blue);
draw(arc1^^line1,0.8bp+red);

if (a == t){
draw(circle((a,3),1),0.8bp+blue);
draw(circle((a,1),1),0.8bp+red);
}
Ani.add();
restore();
}
erase();
Ani.movie(BBox(2mm,invisible));

Bildbeschreibung hier eingeben

Gute Animation.(EMPFOHLEN)

import animate;
import patterns;
settings.tex="pdflatex"; 

animation Ani;
unitsize(1cm);
real t=arclength(circle((0,1),1));
int iter=68;

for (int i=0; i <= iter; ++i)
{
save();
real a=i*t/iter;

draw((0+a,1)--(0+a,1)+dir(-90-a*180/pi),Arrow());
draw((0+a,1)--(0+a,1)+dir(180+-90-a*180/pi),dashed+blue); 
draw((0+a,3)--(0+a,3)+dir(-90+a*180/pi),Arrow());
dot((0+a,1),FillDraw(white));
dot((0+a,3),FillDraw(white));
add("yourpattern",hatch(2mm,dir(45)));
fill(box((-1,-0.2),(1+t,0)),pattern("yourpattern"));
draw((-1,0)--(1+t,0),0.6bp+black);

if (i == 0){
draw(circle((a,3),1));
draw(circle((a,1),1));
}
else if (i < iter){
draw(circle((a,3),1));
draw(circle((a,1),1));
// L=alpha*pi*r/180 (wikipedia)
path arc1=arc((0+a,1),1,-90,-90-a*180/pi), // r=1
     arc2=arc((0+a,1),1,90,90-a*180/pi),
     arc3=arc((0+a,3),1,-90,-90+a*180/pi);
path line1=(0,0)--(a,0);
draw(arc2^^arc3,0.6bp+blue);
draw(arc1^^line1,0.8bp+red);
}
else {
draw(circle((a,3),1),0.6bp+blue);
draw(circle((a,1),1),0.6bp+red);
draw((0,0)--(a,0),0.8bp+red);
}
Ani.add();
restore();
}
erase();
Ani.movie(BBox(2mm,invisible));

https://ezgif.com/pdf-to-gif

Bildbeschreibung hier eingeben

Antwort2

Hier ist einTiKZLösung, die eine leicht erweiterte Version des OP ist und animiert ist mit

konvertieren -delay 5 -loop 0 -density 200 -background white -alpha entfernen file.pdf file.gif

produzieren:

Bildbeschreibung hier eingeben

Um dies aus dem MWE zu erhalten, ändern wir zunächst den Code, um die Pfeile in beliebigen Winkeln positionieren zu können, so dass wir

Bildbeschreibung hier eingeben

Hier ist die Modifikation tikzpicturevom MWE, die dies erzeugt:

  \foreach \ang [evaluate=\ang as \dist using {(\ang-270)*pi/180}] in {270,265,...,-85} {%
    \begin{tikzpicture}
      \useasboundingbox (-3.2, -0.3) rectangle (3.2, 4.2);
      \draw (0,1) circle [radius=1];
      \draw (0,3) circle [radius=1];
      \draw[-stealth,red] (-0.65,1.3) arc (-200:-260:0.6);
      \draw[-stealth,blue] (-0.65,2.7) arc (200:260:0.6);
      \path[pattern={Lines[angle=45,distance={4pt/sqrt(2)}]}]
             (-3,0) edge[thick] ++(6,0) rectangle ++ (6,-0.2);
      \draw[-Stealth]  (0,3)node[axel]{} -- ++({180-\ang}:1);
      \draw[-Stealth]  (0,1)node[axel]{} -- ++(\ang:1);
      \draw[red,thick] (0,0) -- ++ (\dist, 0);
      \draw[blue,thick](0,2) arc (270:540-\ang:1);
      \draw[blue,thick](0,2) arc (90:\ang-180:1);
      \draw[red,thick] (0,0) arc (270:\ang:1);
    \end{tikzpicture}%
  }

Die stationäre Version ist beim Betrachten etwas ablenkend, enthält aber bereits alles, was wir brauchen, um das Bild rollen zu lassen. Der Hauptunterschied zwischen der stationären und der rollenden Version besteht darin, dass wir die x-Koordinaten der meisten Knoten um verschieben müssen \dist. Hier ist der endgültige Code:

\documentclass[tikz,border=3mm]{standalone}
\usepackage{tikz-cd}
\usetikzlibrary{calc}
\usetikzlibrary{patterns,patterns.meta,decorations.pathmorphing}

\tikzset{
  axel/.style = {circle, minimum width=1mm,inner sep=0pt, draw, fill=white}
}

\begin{document}
  \foreach \ang [evaluate=\ang as \dist using {(270-\ang)*pi/180}] in {270,265,...,-85} {%
    \begin{tikzpicture}
      \useasboundingbox (-2, -0.3) rectangle (8, 4.2);
      \draw (\dist,1) circle [radius=1];
      \draw (\dist,3) circle [radius=1];
      \draw[-stealth,red] (\dist-0.65,1.3) arc (-200:-260:0.6);
      \draw[-stealth,blue] (\dist-0.65,2.7) arc (200:260:0.6);
      \path[pattern={Lines[angle=45,distance={4pt/sqrt(2)}]}]
             (-1,0) edge[thick] ++(8,0) rectangle ++ (8,-0.2);
      \draw[-Stealth]  (\dist,3)node[axel]{} -- ++({180-\ang}:1);
      \draw[-Stealth]  (\dist,1)node[axel]{} -- ++(\ang:1);
      \draw[red,thick] (0,0)--(\dist,0);
      \draw[blue,thick](\dist,2) arc (270:540-\ang:1);
      \draw[blue,thick](\dist,2) arc (90:\ang-180:1);
      \draw[red,thick] (\dist,0) arc (270:\ang:1);
    \end{tikzpicture}%
  }
\end{document}

Antwort3

Die Sicht des bewegten Beobachters, erstellt mit TikZ.

\documentclass{standalone}
%\documentclass[dvisvgm]{standalone}
%\documentclass[export]{standalone}

\usepackage{tikz}
\usetikzlibrary{calc,patterns.meta,arrows.meta}

\usepackage{animate}
\usepackage{xsavebox} % xlrbox

\begin{document}
  \begin{xlrbox}{ground}
    \begin{tikzpicture}
      \path[pattern={Lines[angle=45,distance={4pt/sqrt(2)}]}]
             (-1,0) edge[thick] ++(8,0) rectangle ++ (8,-0.2);
    \end{tikzpicture}%
  \end{xlrbox}%
%
  \begin{animateinline}[controls,loop]{20}
    \multiframe{181}{iAngle=270+-2}{
      \pgfmathsetmacro\dist{(270-\iAngle)*pi/180}%
      \begin{tikzpicture}
        \path[use as bounding box, clip] (\dist-2,-0.3) rectangle (\dist+2,4.2);
        \draw (\dist,1) circle [radius=1];
        \draw (\dist,3) circle [radius=1];
        \draw[-stealth,red] ($(\dist,1)+(\iAngle-110:0.65)$) arc (\iAngle-110:\iAngle-170:0.65);
        \draw[-stealth,blue] ($(\dist,3)+(110-\iAngle:0.65)$) arc (110-\iAngle:170-\iAngle:0.65);
        \node [anchor=north west, inner sep=0pt] at (-1,0) {\theground};
        \draw[dashed,blue] (\dist,1) -- ++(\iAngle-180:1);
        \draw[-Stealth] (\dist,1) -- ++(\iAngle:1);
          \filldraw[fill=white] (\dist,1) circle (0.5mm);
        \draw[-Stealth] (\dist,3) -- ++(180-\iAngle:1);
          \filldraw[fill=white] (\dist,3) circle (0.5mm);
        \draw[red,thick] (0,0)--(\dist,0);
        \draw[blue,thick](\dist,2) arc (-90:180-\iAngle:1);
        \draw[blue,thick](\dist,2) arc (90:\iAngle-180:1);
        \draw[red,thick] (\dist,0) arc (270:\iAngle:1);
      \end{tikzpicture}%
    }
  \end{animateinline}
\end{document}

Antwort4

So? Keine Animation.

\documentclass[tikz,margin=3mm]{standalone}
\usepackage{tikz-cd}
\usetikzlibrary{calc}
\usetikzlibrary{patterns,patterns.meta,decorations.pathmorphing}

\begin{document}
\begin{tikzpicture}
\draw (0,1)coordinate(D) circle [radius=1];
\draw (0,3)coordinate(U) circle [radius=1];

\draw[{Circle[open, length=1mm]}-Stealth] (D) --++ (-150:1);
\draw[{Circle[open, length=1mm]}-Stealth] (U) --++ (-20:1);
\draw[densely dashed, blue] (D) --++ (30:1);
\draw [very thick, red] ([yshift=-1cm]D)coordinate(DD) arc (-90:-150:1);
\draw [very thick, blue] ([yshift=1cm]D) arc (90:30:1);
\draw [very thick, blue] ([yshift=-1cm]U) arc (-90:-20:1);

\path[pattern={Lines[angle=45,distance={4pt/sqrt(2)}]}] (-1.5,0) edge[thick] ++(3,0) rectangle ++ (3,-0.2);
\draw [very thick, red] (DD)--++(180:0.9);
\end{tikzpicture}
\end{document}

Bildbeschreibung hier eingeben

verwandte Informationen