Ich habe eine nette Frage und Antwort gesehen.Hier, über das Erstellen einer Animation zur Demonstration von Graphisomorphismus. Ich möchte dasselbe für diese beiden Beispiele tun:
Diese zweiSindisomorph: Diese zweisind nichtisomorph:
Mir ist klar, dass der Großteil des Codes unter dem Link bereitgestellt wird, den ich zuvor angegeben habe, aber ich habe nicht viel Erfahrung mit LaTeX und habe lediglich ein wenig Probleme, den Code an die neuen Grafiken anzupassen.
Ich habe also diese Form (ein Pentagon):
\documentclass{standalone}
\usepackage{tikz}
\begin{document}
\begin{tikzpicture}
\tikzset{Bullet/.style={circle,draw,fill=black,scale=0.75}}
\node[Bullet,label=left :{$e_1$}] (E1) at (0,2) {} ;
\node[Bullet,label=above:{$e_2$}] (E2) at (1,3) {} ;
\node[Bullet,label=right:{$e_3$}] (E3) at (2,2) {} ;
\node[Bullet,label=right:{$e_4$}] (E4) at (2,0) {} ;
\node[Bullet,label=left :{$e_5$}] (E5) at (0,0) {} ;
\draw[thick] (E1)--(E2)--(E3)--(E4)--(E5)--(E1) {} ;
\end{tikzpicture}
\end{document}
Und ich habe diese Form (ein PentaGramm):
\documentclass{standalone}
\usepackage{tikz}
\begin{document}
\begin{tikzpicture}
\tikzset{Bullet/.style={circle,draw,fill=black,scale=0.75}}
\node[Bullet,label=left :{$c_1$}] (C1) at (0,2) {} ;
\node[Bullet,label=above:{$c_2$}] (C2) at (1,3) {} ;
\node[Bullet,label=right:{$c_3$}] (C3) at (2,2) {} ;
\node[Bullet,label=right:{$c_4$}] (C4) at (2,0) {} ;
\node[Bullet,label=left :{$c_5$}] (C5) at (0,0) {} ;
\draw[thick] (C1)--(C3)--(C5)--(C2)--(C4)--(C1) {} ;
\end{tikzpicture}
\end{document}
Der Code ist im Grunde für alle gleich. Abgesehen von den Namen und Beschriftungen der Eckpunkte besteht der einzige wirkliche Unterschied zwischen den beiden darin, dass die Kanten verschiedene Eckpunktpaare miteinander verbinden. Das Fünfeck ist also 1-2-3-4-5-1 und das Pentagramm 1-3-5-2-4-1.
Wie dem auch sei, ich muss nur wissen, wie man das Verschmelzen eines in das andere und wieder zurück animiert. Ich bin noch dabei, mich mit LaTeX vertraut zu machen, also versuche ich, es möglichst einfach zu halten. Vielen Dank im Voraus.
Antwort1
Eine Möglichkeit, die Äquivalenz darzustellen, besteht darin, den Graphen in 3D zu zeichnen und dann die Eckpunkte zu verschieben.
\documentclass[tikz,border=3.14mm]{standalone}
\usepackage{tikz-3dplot}
\begin{document}
\pgfmathsetmacro{\t}{135}
\pgfmathsetmacro{\R}{3}
\tdplotsetmaincoords{70}{0}
\foreach \t in {0,4,...,180}
{\begin{tikzpicture}[tdplot_main_coords,font=\sffamily,
bullet/.style={circle,fill,inner sep=1.5pt}]
\path[use as bounding box,tdplot_screen_coords]
(-1.2*\R,-1.2*\R) rectangle (1.2*\R,1.2*\R);
\pgfmathsetmacro{\tmax}{2*max(\t-90,0)}
\node[bullet,label=above:v1] (v1) at (0,0,\R){};
\node[bullet,label=\tmax:v2] (v2) at
({\R*cos(min(\t,90))*cos(18)+\R*sin(min(\t,90))*cos(-54)
+2*\R*cos(max(\t,90))*cos(-54)},{\R*sin(min(2*\t,180))},%
{\R*cos(min(\t,90))*sin(18)+\R*sin(min(\t,90))*sin(-54)}){};
\node[bullet,label=right:v3] (v3) at
({\R*sin(min(\t,90))*cos(18)+\R*cos(min(\t,90))*cos(-54)},{-\R*sin(min(2*\t,180))},%
{\R*sin(min(\t,90))*sin(18)+\R*cos(min(\t,90))*sin(-54)}){};
\node[bullet,label=left:v4] (v4) at
({-1*\R*sin(min(\t,90))*cos(18)-\R*cos(min(\t,90))*cos(-54)},{-\R*sin(min(2*\t,180))},%
{\R*sin(min(\t,90))*sin(18)+\R*cos(min(\t,90))*sin(-54)}){};
\node[bullet,label=180-\tmax:v5] (v5) at
({-1*\R*cos(min(\t,90))*cos(18)-\R*sin(min(\t,90))*cos(-54)
-2*\R*cos(max(\t,90))*cos(-54)},{\R*sin(2*\t)},%
{\R*cos(min(\t,90))*sin(18)+\R*sin(min(\t,90))*sin(-54)}){};
\draw[thick] (v1) -- (v3) -- (v5) -- (v2) -- (v4) -- (v1);
\end{tikzpicture}}
\end{document}
Wenn Sie die Strategie vondiese Antwortkönnen Sie ein Wörterbuch zwischen den ursprünglichen und zugeordneten Scheitelpunktnamen und dessen Inverse definieren, das im Folgenden \LstMapped
und genannt wird. Dann können Sie Teilmodifikatoren verwenden, wie im ursprünglichen Beitrag und wie im Abschnitt erläutert\LstMappedInverse
4.2.1 Verwendung von Partway-Rechnungen zur Konstruktion von Ddes pgfmanuals, um zwischen den Koordinaten zu interpolieren.
\documentclass[tikz,border=3.14mm]{standalone}
\usetikzlibrary{calc}
\begin{document}
\foreach \t in {0,0.05,...,1,1,0.95,...,0}
{\begin{tikzpicture}[bullet/.style={fill,circle,inner sep=1.5pt},font=\sffamily]
\path[use as bounding box] (-3.5,-3.5) rectangle (3.5,3.5);
\edef\LstMapped{{1,3,5,2,4}}
\edef\LstMappedInverse{{1,4,2,5,3}}
\foreach \X in {1,...,5}
{\pgfmathtruncatemacro{\Xmapped}{\LstMapped[\X-1]}
\coordinate[alias=v'\Xmapped] (v\X) at (90+72-72*\X:3);}
\foreach \X in {1,...,5}
{\pgfmathtruncatemacro{\Xmapped}{\LstMappedInverse[\X-1]}
\node[bullet,label={[opacity=1-\t]90+72-72*\X:$v_\X$},
label={[opacity=\t]90+72-72*\Xmapped:$v_\Xmapped'$}] (m\X) at ($(v\X)!\t!(v'\X)$){};}
\draw (m1) -- (m3) -- (m5) -- (m2) -- (m4) -- (m1);
\end{tikzpicture}}
\end{document}