旋转标准图

旋转标准图

有没有办法在 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

使用rotatetransform 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 文档中未提及的其他内容。

相关内容