So erstellen Sie mit TikZ ein interaktives Diagramm

So erstellen Sie mit TikZ ein interaktives Diagramm

Ich versuche, eineinteraktivDiagramm, ähnlich dem in den vonBücher:

Go Books-Diagramm - Ausgangsposition

Go Books-Diagramm – Zug 1

Mit „interaktiv“ meine ich, dass der Benutzer steuert, wann Dinge ausgelöst werden. Animationen beispielsweise sind nicht das, was ich als Interaktivität bezeichnen würde, da sie unabhängig davon ablaufen, was der Benutzer tut. (Natürlich könnten wir zwischen jeder Bewegung eine Animation haben.)

Ich weiß ehrlich gesagt nicht, ob das mit TikZ überhaupt möglich ist. Ist es das? Vielleicht gibt es eine Möglichkeit, HTML und JS in TikZ einzufügen?

Hier ist ein Minimalbeispiel für ein Go-Brett mit 3 Zügen. Die Idee wäre, dass TikZ eine Art Benutzeroberfläche zum Vor- und Zurückgehen hinzufügt und dann jeden Zug entsprechend anzeigt – eine Wiedergabetaste ist nicht erforderlich –:

\documentclass{article}

\usepackage{tikz}

\newlength{\step}

\begin{document}
  \begin{tikzpicture}
    \setlength{\step}{\dimexpr 10cm / 18 \relax}

    \draw[step=\step] (0, 0) grid (10, 10);

    \draw[draw = white, fill = black, line width = 0.1mm]
      (2 * 10cm / 18, 3 * 10cm / 18)
      circle [radius = 0.2575cm]
      node[color = white] {1};
    \draw[draw = black, fill = white, line width = 0.1mm]
      (3 * 10cm / 18, 3 * 10cm / 18)
      circle [radius = 0.2575cm]
      node[color = black] {2};
    \draw[draw = white, fill = black, line width = 0.1mm]
      (4 * 10cm / 18, 3 * 10cm / 18)
      circle [radius = 0.2575cm]
      node[color = white] {3};
  \end{tikzpicture}
\end{document}

Antwort1

Credits sollten auch gehen anAlexG. Danke für sein tolles animatePaket. Und der \playgoBefehl ist auch von seiner Idee in diesemPost( \uncoverBefehl).

Hier ist ein Beispiel animateinlinemit dem Paket animate. Es funktioniert in Adobe Reader und Foxit Reader (es scheint nicht im PDF Viewer von VS Code zu funktionieren):

\documentclass{article}

\usepackage{tikz}
\usepackage{animate}

\newlength{\step}
\setlength{\step}{\dimexpr 10cm / 18 \relax}

\newcommand\playgo[3]{\ifnum#1<#2\phantom{#3}\else#3\fi}

\begin{document}
  \begin{animateinline}[step,controls=step]{1}
    \multiframe{4}{i=0+1}{
      \begin{tikzpicture}[x=\step,y=\step]
        %create the board 
        \draw[step=1] (0, 0) grid (18, 18);

        %setup black
        \foreach \bloc in {{2,4},{3,4},{4,4},{5,4},{6,5},{7,6}}{
          \filldraw[line width = 0.1mm] (\bloc) circle [radius = 0.2575cm];
        }

        %setup white
        \foreach \wloc in {{2,6},{3,6},{4,6},{5,6},{6,6},{7,7}}{
          \filldraw[fill=white,line width = 0.1mm] (\wloc) circle [radius = 0.2575cm];
        }

        %play the go-game start from black
        \foreach \stepnum/\loc in {1/{8,7},2/{8,8},3/{9,8}}{
          \playgo{\i}{\stepnum}{\filldraw[fill={\ifodd\stepnum black\else white\fi},line width = 0.1mm] (\loc) circle [radius = 0.2575cm] node [color = \ifodd\stepnum white\else black\fi] {\stepnum};}
        }
      \end{tikzpicture}
    }
  \end{animateinline}
\end{document}

Schritt für Schritt Animationen

Und diese Animation wird folgendermaßen gesteuert:

Animationssteuerung

Aktualisierungen: Fügen Sie einen angezeigten Fortschrittsbalken und eine ausgefallene Farbe hinzu.

\documentclass{article}

\usepackage{tikz}
\usepackage{animate}

\newlength{\step}
\setlength{\step}{\dimexpr 10cm / 18 \relax}

\newcommand\playgo[3]{\ifnum#1<#2\phantom{#3}\else#3\fi}
\newcounter{totalsteps}
\setcounter{totalsteps}{3}

\begin{document}
{\centering
  \begin{animateinline}[step,controls=step]{1}
    \multiframe{\numexpr\value{totalsteps}+1}{i=0+1}{
      \begin{tikzpicture}[x=\step,y=\step]
        %create the board 
        \fill [brown!30] (-0.5,-0.5) rectangle (18.5,18.5);
        \draw[step=1] (0, 0) grid (18, 18);
        \draw [line width=2pt] (0,0) rectangle (18,18);
        \foreach \sloc in 
 {{3,3},{3,9},{3,15},{9,3},{9,9},{9,15},{15,3},{15,9},{15,15}}{\filldraw (\sloc) circle [radius=1.5pt];}
        %add progress bar
        \draw [rounded corners=3pt,blue!20] (5,-0.85) rectangle (13,-1.15);
        \fill [rounded corners=3pt,blue] (5,-0.85) rectangle ++(\i*13/\value{totalsteps}-\i*5/\value{totalsteps} ,-0.3);
        \filldraw [blue] (5,-0.85) ++ (\i*13/\value{totalsteps}-\i*5/\value{totalsteps} ,-0.15) circle [radius=5pt];
        %setup black
        \foreach \bloc in {{2,4},{3,4},{4,4},{5,4},{6,5},{7,6}}{
          \filldraw[line width = 0.1mm] (\bloc) circle [radius = 0.2575cm];
        }

        %setup white
        \foreach \wloc in {{2,6},{3,6},{4,6},{5,6},{6,6},{7,7}}{
          \filldraw[fill=white,line width = 0.1mm] (\wloc) circle [radius = 0.2575cm];
        }

        %play the go-game start from black
        \foreach \stepnum/\loc in {1/{8,7},2/{8,8},3/{9,8}}{
          \playgo{\i}{\stepnum}{\filldraw[fill={\ifodd\stepnum black\else white\fi},line width = 0.1mm] (\loc) circle [radius = 0.2575cm] node [color = \ifodd\stepnum white\else black\fi] {\stepnum};}
        }
      \end{tikzpicture}
    }
  \end{animateinline}\par}
\end{document}

Bildbeschreibung hier eingeben

Antwort2

Ich habe TikZ und das Animate-Paket verwendet, um die folgende Animation zu erstellen:

Bildbeschreibung hier eingeben

Der klassische Ansatz besteht darin, die Bilder Einzelbild für Einzelbild in einer .texDatei zu speichern. Für mathematische oder auf Algorithmen basierende Zahlen können Sie Schleifen verwenden. Das ist perfekt, aber in diesem Fall habe ich eine Einzelbilddatei erstellt, die ich benannt habeGo-game.tex

\documentclass[tikz, border=30mm]{standalone}
\usetikzlibrary{fadings}
\definecolor{backcol}{HTML}{8b5a16}
\definecolor{wood}{HTML}{5d2f03}
\definecolor{gwhite}{HTML}{ecefe9}
\definecolor{gblack}{HTML}{221d1d}


\newcommand{\white}[1]{
\begin{scope}[shift={#1}]
\shade[top color=gwhite, bottom color=white] (0,0)circle(0.95);
\end{scope}
}

\newcommand{\black}[1]{
\begin{scope}[shift={#1}]
\shade[top color=gblack, bottom color=black] (0,0)circle(0.95);
\end{scope}
}

\begin{document}
\pagecolor{backcol}
\color{wood}
\foreach\i in {0, 10, 20, ..., 100}{
\begin{tikzpicture}
\draw[line width=0.5mm, step=2] (0,0)grid(16,16);
\white{(4,4)}
\white{(4,6)}

\node[opacity=\i/100, scale=3, text width=4cm, align =center, preaction={fill, wood}] at (8,14) {\color{white}In order to take over the white goishi we need};

\end{tikzpicture}
}
\foreach\i in {90, 80,..., 0}{
\begin{tikzpicture}
\draw[line width=0.5mm, step=2] (0,0)grid(16,16);
\white{(4,4)}
\white{(4,6)}

\node[opacity=\i/100, scale=3, text width=4cm, align =center, preaction={fill, wood}] at (8,14) {\color{white}In order to take over the white goishi we need};

\end{tikzpicture}
}

\foreach\i in {0, 10, 20, ..., 100}{
\begin{tikzpicture}
\draw[line width=0.5mm, step=2] (0,0)grid(16,16);
\white{(4,4)}
\white{(4,6)}

\node[opacity=\i/100, scale=3, text width=4cm, align =center, preaction={fill, wood}] at (8,14) {\color{white}To surround them using the black goishi};
\end{tikzpicture}
}
\foreach\i in {90, 80, 70, ..., 0}{
\begin{tikzpicture}
\draw[line width=0.5mm, step=2] (0,0)grid(16,16);
\white{(4,4)}
\white{(4,6)}

\node[opacity=\i/100, scale=3, text width=4cm, align =center, preaction={fill, wood}] at (8,14) {\color{white}To surround them using the black goishi};
\end{tikzpicture}
}


\begin{tikzpicture}
\draw[line width=0.5mm, step=2] (0,0)grid(16,16);
\white{(4,4)}
\white{(4,6)}
\black{(2,4)}
\end{tikzpicture}

\begin{tikzpicture}
\draw[line width=0.5mm, step=2] (0,0)grid(16,16);
\white{(4,4)}
\white{(4,6)}
\black{(2,4)}
\black{(4,2)}

\end{tikzpicture}

\begin{tikzpicture}
\draw[line width=0.5mm, step=2] (0,0)grid(16,16);
\white{(4,4)}
\white{(4,6)}
\black{(2,4)}
\black{(4,2)}
\black{(6,4)}
\end{tikzpicture}

\begin{tikzpicture}
\draw[line width=0.5mm, step=2] (0,0)grid(16,16);
\white{(4,4)}
\white{(4,6)}
\black{(2,4)}
\black{(4,2)}
\black{(6,4)}
\black{(6,6)}
\end{tikzpicture}

\begin{tikzpicture}
\draw[line width=0.5mm, step=2] (0,0)grid(16,16);
\white{(4,4)}
\white{(4,6)}
\black{(2,4)}
\black{(4,2)}
\black{(6,4)}
\black{(6,6)}
\black{(4,8)}
\end{tikzpicture}

\begin{tikzpicture}
\draw[line width=0.5mm, step=2] (0,0)grid(16,16);
\white{(4,4)}
\white{(4,6)}
\black{(2,4)}
\black{(4,2)}
\black{(6,4)}
\black{(6,6)}
\black{(4,8)}
\black{(2,6)}
\end{tikzpicture}

\foreach\i in {90, 80, 70, ...,0}{
\begin{tikzpicture}
\draw[line width=0.5mm, step=2] (0,0)grid(16,16);
\begin{scope}[opacity=\i/100]
\white{(4,4)}
\white{(4,6)}
\end{scope}
\black{(2,4)}
\black{(4,2)}
\black{(6,4)}
\black{(6,6)}
\black{(4,8)}
\black{(2,6)}
\end{tikzpicture}

}

\end{document}

Durch die Kompilierung Ihrer Datei Go-game.pdferstellen wir eine Animation unserer Frames:

\documentclass[tikz, border=40mm]{standalone}
\usepackage{animate}
\begin{document}
\animategraphics[controls=all, loop]{15}{Go-game}{}{}
\end{document}

Und ja, danach sollte Ihre Animation bereit sein.

verwandte Informationen