![旋转标准图](https://linux22.com/image/381034/%E6%97%8B%E8%BD%AC%E6%A0%87%E5%87%86%E5%9B%BE.png)
有没有办法在 tikz 中旋转标准图形?
例如,下面生成一个有 6 个顶点的循环图
\begin{tikzpicture}[every node/.style={fill,circle,very thick,inner sep=0pt}]
\graph[clockwise, radius=2cm] {subgraph C_n [n=6]};
\end{tikzpicture}
有什么方法可以让我按指定角度旋转该图形吗?
答案1
使用rotate
,transform shape
您可以将图形旋转至您选择的任意角度。
\documentclass[tikz,margin=0.5cm]{standalone}
\usetikzlibrary{graphs}
\usetikzlibrary{graphs.standard}
\begin{document}
\begin{tikzpicture}[every node/.style={fill,circle,very thick,inner sep=0pt}]
\begin{scope}[rotate=15,transform shape]
\graph[clockwise, radius=2cm] {subgraph C_n [n=6]};
\end{scope}
\end{tikzpicture}
\end{document}
答案2
仅用于测试,由库 Graphs 生成的图形充当一个节点,当您使用带有修饰符旋转的范围时,仅影响坐标,要旋转每个节点,您必须在每个节点样式中声明旋转值;正确的方法是使用变换形状,这里对这些方面的测试包括基本的 tikz 代码绘图(红色)和使用 graphicx 在节点中导入图像。
结果:
MWE:使用 imagemagik 转换器制作动画
% arara: pdflatex: {synctex: yes, action: nonstopmode}
% arara: animate: {density: 150, delay: 15, other: -background white -alpha remove}
% arara: showanimate
\documentclass[tikz,margin=0.5cm]{standalone}
\usetikzlibrary{graphs}
\usepackage{graphicx}
\usetikzlibrary{graphs.standard,calc}
\begin{document}
\foreach \x in {0,1,...,29}{
\begin{tikzpicture}[
every node/.style={
fill=blue!20,
circle,
very thick,
inner sep=0pt,
minimum size=12pt
}
]
\pgfmathparse{int(12*\x)}
\edef\Angle{\pgfmathresult}
%Set image limits to avoid flickering
\draw(-3,4) rectangle (9,-9);
\draw(90:2.7) node[fill=none,font=\scriptsize] {Scope{[}rotate=0{]}}
++(6,0) node[fill=none,font=\scriptsize] {Scope{[}rotate=\Angle{]}}
++(0,-6) node[fill=none,font=\scriptsize] {Scope{[}rotate=\Angle,trasform shape{]}}
++(-6,0) node[fill=none,font=\scriptsize] {Scope{[}rotate=0{]}, each node{[}rotate=\Angle{]}};
%basic drawing test
\begin{scope}[rotate=0]
%Graph generated objet
\graph[clockwise, radius=2cm] {subgraph C_n [n=6]};
%Tikz basic code objet
\foreach \n in {1,2,...,6}{
\node[fill=red!20](n\n) at (60*\n:1.5){\n};
}
\draw[red,->](n1)
-- (n2) -- node[midway,sloped,above=-10pt, font=\tiny,fill=none]{tikz objet} (n3) -- (n4)
-- (n5) -- (n6) -- (n1);
\node[label={-90:\tiny Angle}] at (0:2.5cm) {0};
%Graphicx Objet
\node at (0,0){\includegraphics[width=1.5cm]{example-image}};
\node at (180:2.5cm){\includegraphics[width=0.5cm]{example-image-a}};
\end{scope}
%test rotate
\begin{scope}[shift={(6,0)},rotate=\Angle]
%Graph generated objet
\graph[clockwise, radius=2cm] {subgraph C_n [n=6]};
%Tikz basic code objet
\foreach \n in {1,2,...,6}{
\node[fill=red!20](n\n) at (60*\n:1.5){\n};
}
\draw[red,->](n1)
-- (n2) -- node[midway,sloped,above=-10pt, font=\tiny,fill=none]{tikz objet} (n3) -- (n4)
-- (n5) -- (n6) -- (n1);
\node[label={-90:\tiny Angle}] at (0:2.5cm) {\Angle};
%Graphicx Objet
\node at (0,0){\includegraphics[width=1.5cm]{example-image}};
\node at (180:2.5cm){\includegraphics[width=0.5cm]{example-image-a}};
\end{scope}
%test rotate nodes
\begin{scope}[shift={(0,-6)},rotate=0]
%Graph generated objet
\graph[clockwise, radius=2cm] {subgraph C_n [n=6]};
%Tikz basic code objet
\foreach \n in {1,2,...,6}{
\node[fill=red!20,rotate=\Angle](n\n) at (60*\n:1.5){\n};
}
\draw[red,->](n1)
-- (n2) -- node[midway,sloped,above=-10pt, font=\tiny,fill=none,rotate=\Angle]{tikz objet} (n3) -- (n4)
-- (n5) -- (n6) -- (n1);
\node[label={-90:\tiny Angle},rotate=\Angle] at (0:2.5cm) {\Angle};
%Graphicx Objet
\node at (0,0){\includegraphics[width=1.5cm,angle=\Angle]{example-image}};
\node at (180:2.5cm){\includegraphics[width=0.5cm,angle=-\Angle]{example-image-a}};
\end{scope}
%test 4 transform shape
\begin{scope}[shift={(6,-6)},rotate=\Angle, transform shape]
%Graph generated objet
\graph[clockwise, radius=2cm] {subgraph C_n [n=6]};
%Tikz basic code objet
\foreach \n in {1,2,...,6}{
\node[fill=red!20](n\n) at (60*\n:1.5){\n};
}
\draw[red,->](n1)
-- (n2) -- node[midway,sloped,above=-10pt, font=\tiny,fill=none]{tikz objet} (n3) -- (n4)
-- (n5) -- (n6) -- (n1);
\node[label={-90:\tiny Angle}] at (0:2.5cm) {\Angle};
%Graphicx Objet
\node at (0,0){\includegraphics[width=1.5cm]{example-image}};
\node at (180:2.5cm){\includegraphics[width=0.5cm]{example-image-a}};
\end{scope}
\end{tikzpicture}
}
\end{document}
答案3
你应该调查一下tkz-山包。它是专为图论而设计的,并且可以通过选项轻松设置旋转。
\documentclass[11pt,border=2pt]{standalone}
\usepackage{tkz-berge}
\begin{document}
\begin{tikzpicture}
\GraphInit[vstyle=Shade]
\SetVertexNoLabel
\grCycle[x=0,y=0, rotation=90]{6}
\grCycle[x=10,y=0]{6}
\end{tikzpicture}
\end{document}
Gummi 中运行的输出是:
请注意,有一个用于循环的命令,\grCycle,在选项中,第一个循环的位置位于 x=0 和 y=0 处,并旋转 90 度。还请注意,您可以使图形具有特定的外观;下面的是
Shade
。还有选项可以将顶点标记为内部或外部,并为弧加权。
编辑:我还应该指出“命名图表库”,它是这里. 这包括 Petersen 图的 3 种不同表示形式、笼子以及 tkz-berge 文档中未提及的其他内容。