在 Tikz 图形中旋转一组点

在 Tikz 图形中旋转一组点

我正在尝试使用 TikZ 绘制一些费曼图。我需要多次使用的对象是下图中的对象。但根据具体情况,我想以图片中的两种方式之一呈现它(作为“x”或“十字”)

在此处输入图片描述

我绘制了如下的 x 版本。我知道我可以以同样的方式绘制十字版本,手动更改所有坐标,但我想知道是否有办法将所有坐标旋转 45° 以自动完成。

\documentclass{article}
\usepackage{tikz} 
\usepackage{tikz-feynman}
\tikzfeynmanset{compat=1.1.0}
\usetikzlibrary{shapes,arrows,positioning,automata,backgrounds,calc,er,patterns,positioning,quotes}

\begin{document}
\begin{tikzpicture}

        \coordinate (A1) at (-1,2);
        \coordinate (A2) at (0,1);
        \coordinate (A3) at (1,2);
        \coordinate (A4) at (2,1);
        \coordinate (A5) at (1,0);
        \coordinate (A6) at (2,-1);
        \coordinate (A7) at (1,-2);
        \coordinate (A8) at (0,-1);
        \coordinate (A9) at (-1,-2);
        \coordinate (A10) at (-2,-1);
        \coordinate (A11) at (-1,0);
        \coordinate (A12) at (-2,1);
        
        \draw (A1) -- (A2) -- (A3);
        \draw (A4) -- (A5) -- (A6);
        \draw (A7) -- (A8) -- (A9);
        \draw (A10) -- (A11) -- (A12);
\end{tikzpicture}


\end{document}

编辑:关于添加 [rotate=45] 的建议,当只有一个“x”存在时,它确实有效。我应该提到,我想要绘制的一些图表有两个并排的“x”。在这种情况下,添加 [rotate=45] 会使它们不并排,而是一个在另一个的对角线上。

答案1

该代码有效(3个相邻交叉):

\documentclass{article}
\usepackage{tikz} 

\begin{document}
    \begin{tikzpicture}
        \foreach \an in {0,90,180,270}
            \draw[rotate=\an] (2,-1)--(1,0)--(2,1);
        
        \begin{scope}[xshift=5cm,red,rotate=45]
            \foreach \an in {0,90,180,270}
                \draw[rotate=\an] (2,-1)--(1,0)--(2,1);
        \end{scope}
        
        \begin{scope}[xshift=10cm,blue,rotate=30]
            \foreach \an in {0,90,180,270}
            \draw[rotate=\an] (2,-1)--(1,0)--(2,1);
        \end{scope}
    \end{tikzpicture}
\end{document}

输出为:

在此处输入图片描述

添加:一个新的简单版本,在环境中定义一个带有 4 个参数的新命令(\crossscope

#1:xshift \cross(以厘米为单位);#2:颜色;#3:旋转角度(以度为单位);#4:调整十字以完成图片的比例因子。

代码(带有2个交叉示例):

\documentclass{article}
\usepackage{tikz} 
\newcommand*{\cross}[4]{
\begin{scope}[xshift=#1cm,#2,rotate=#3,scale=#4]
    \foreach \an in {0,90,180,270}
    \draw[rotate=\an] (2,-1)--(1,0)--(2,1);
\end{scope}
}
\begin{document}
    \begin{tikzpicture}
        \cross{5}{blue}{0}{1}
        \cross{0}{red}{45}{.5}
    \end{tikzpicture}
\end{document}

输出:

在此处输入图片描述

答案2

我曾经遇到过同样的问题,简单的解决办法是不使用coordinate带有转换的命令。

\documentclass{article}
\usepackage{tikz} 
\usepackage{tikz-feynman}
\tikzfeynmanset{compat=1.1.0}
\usetikzlibrary{shapes,arrows,positioning,automata,backgrounds,calc,er,patterns,positioning,quotes}

\begin{document}
    \begin{tikzpicture}
        
        \coordinate (A1) at (-1,2);
        \coordinate (A2) at (0,1);
        \coordinate (A3) at (1,2);
        \coordinate (A4) at (2,1);
        \coordinate (A5) at (1,0);
        \coordinate (A6) at (2,-1);
        \coordinate (A7) at (1,-2);
        \coordinate (A8) at (0,-1);
        \coordinate (A9) at (-1,-2);
        \coordinate (A10) at (-2,-1);
        \coordinate (A11) at (-1,0);
        \coordinate (A12) at (-2,1);

\begin{scope}[rotate=40]
            \draw (-1,2)--(0,1)-- (1,2);
        \draw (2,1) -- (1,0)-- (2,-1);
        \draw  (1,-2) -- (0,-1) --  (-1,-2);
        \draw  (-2,-1) --  (-1,0) -- (-2,1);
\end{scope}
    \end{tikzpicture}
    
    
\end{document}

相关内容