如何在这个图形之间画一个箭头?

如何在这个图形之间画一个箭头?

我使用\tikzset{pics ...环境定义了一个 tikz 图像,这样我就可以重复并更改几个参数。但是,我希望有一个箭头连接两个图像。我很难做到这一点,因为我不确定如何为箭头可能连接的每个图像创建两个不同的节点。

我有以下内容图像这是由下面的 MWE 创建的。我如何在顶部的两条线之间画一个箭头,并贴上一个标签,上面写着 $\theta$。

\documentclass[tikz]{standalone}
\usepackage{pgfplots}
\usetikzlibrary{arrows,shapes,backgrounds,fit,decorations.pathreplacing,chains,snakes,positioning}  
\usepackage{amsmath,amssymb,bm}

\tikzset{
pics/gridd/.style n args={2}{
code = {%
    \def \s{0.5}
    \def \nx{3}
    \def \ny{2}
    \def \dx{3}
    \def \dy{3}
    \def \meshthickness{0.01}
    \pgfmathsetmacro \maxposx {\dx*(\nx-1)/2}   
    \pgfmathsetmacro \maxposy {\dy*(\ny-1)/2}

    \draw[line width = 0.2mm] (0, \maxposy) -- (0, \maxposy + 0.8);

    \filldraw[black] circle (2pt); 

    \draw [dashed, line width = 0.2mm] (-\maxposx,\maxposy) -- (\maxposx,\maxposy);
    \draw [dashed, line width = 0.2mm] (\maxposx,\maxposy) -- (\maxposx,-\maxposy);
    \draw [dashed, line width = 0.2mm] (-\maxposx,-\maxposy) -- (\maxposx,-\maxposy);
    \draw [dashed, line width = 0.2mm] (-\maxposx,-\maxposy) -- (-\maxposx,\maxposy);
    \draw [dashed, line width = 0.2mm] (0,-\maxposy) -- (0,\maxposy);

    \foreach \i in {1,...,\nx}{
        \foreach \j in {1,...,\ny}{
            \pgfmathsetmacro \x {(\i - (\nx + 1)/2)*\dx}        
            \pgfmathsetmacro \y {(\j - (\ny + 1)/2)*\dy}
            \filldraw[#1, draw=black, line width = 0.2mm] (\x,\y) circle (#2);
        }
    }
}}}

\begin{document}

\begin{tikzpicture}

\pic {gridd={fill=blue!20!white}{3mm}};

\begin{scope}[rotate around z=20]
\pic {gridd={fill=red!80!white}{3mm}};
\end{scope}

\end{tikzpicture}

\end{document}

答案1

bar如果您有一个以命名的节点/坐标pic,并且pic本身被命名为foo,那么您可以将该节点引用为foobar( 的名称pic加上 节点的名称)。

因为旋转是围绕的中心进行的pic,所以突出显示垂直线之间的角度可能更容易一些,因为您只需加载anglesquotes库,然后使用预定义的即可angle pic

更多解释:

我对代码所做的添加并不多。在代码pic本身中,我在中心和每个顶点添加了一个坐标:

\filldraw[black] circle (2pt) coordinate (-c); 

这里coordinate (-c)是新的,同样在循环中,

\filldraw[#1, draw=black, line width = 0.2mm] (\x,\y) circle (#2) coordinate (-\i-\j);

coordinate (-\i-\j)是新的。例如,左下角有一个名为的坐标(-1-1),位于 内部pic

当使用时pic,我给它们起了名字,a并且b

\pic (a) {gridd={fill=blue!20!white}{3mm}};

由于pic的工作方式,这意味着此 左下角的坐标pic被命名为a-1-1

(TikZ 手册第 18 章中提到了这一点,其中pic描述了 s。)


为了绘制角度本身,我加载了anglesquotes库。其中第一个定义了一个,pic专门用于绘制这样的角度。它被用作pic {angle=<coord 1>--<coord 2>--<coord 3>}。您需要三个命名坐标,这将pic绘制它们之间的角度。它在 TikZ 手册第 39 章中有描述(请查看目录下的图书馆部分)。

所以我用的是

\pic ["$\theta$",angle radius=1cm,draw,-stealth] {angle={a-2-2--a-c--b-2-2}};

您会看到,a-2-2是 的中间、顶部顶点a pica-c是 的中心点a picb-2-2是 的顶部中间b pic

的使用"<text>"是库提供的简写形式quotes,用于向路径添加标签。(此库在第 17.10.4 节中描述引号语法 我认为手册中的最后一个angle radius部分是不言自明的,最后一部分是指定应该用箭头绘制路径。

代码输出

\documentclass[tikz]{standalone}
\usepackage{pgfplots}
\usetikzlibrary{arrows,shapes,backgrounds,fit,decorations.pathreplacing,chains,snakes,positioning,angles,quotes}  
\usepackage{amsmath,amssymb,bm}

\tikzset{
pics/gridd/.style n args={2}{
code = {%
    \def \s{0.5}
    \def \nx{3}
    \def \ny{2}
    \def \dx{3}
    \def \dy{3}
    \def \meshthickness{0.01}
    \pgfmathsetmacro \maxposx {\dx*(\nx-1)/2}   
    \pgfmathsetmacro \maxposy {\dy*(\ny-1)/2}

    \draw[line width = 0.2mm] (0, \maxposy) -- (0, \maxposy + 0.8);

    \filldraw[black] circle (2pt) coordinate (-c); 

    \draw [dashed, line width = 0.2mm] (-\maxposx,\maxposy) -- (\maxposx,\maxposy);
    \draw [dashed, line width = 0.2mm] (\maxposx,\maxposy) -- (\maxposx,-\maxposy);
    \draw [dashed, line width = 0.2mm] (-\maxposx,-\maxposy) -- (\maxposx,-\maxposy);
    \draw [dashed, line width = 0.2mm] (-\maxposx,-\maxposy) -- (-\maxposx,\maxposy);
    \draw [dashed, line width = 0.2mm] (0,-\maxposy) -- (0,\maxposy);

    \foreach \i in {1,...,\nx}{
        \foreach \j in {1,...,\ny}{
            \pgfmathsetmacro \x {(\i - (\nx + 1)/2)*\dx}        
            \pgfmathsetmacro \y {(\j - (\ny + 1)/2)*\dy}
            \filldraw[#1, draw=black, line width = 0.2mm] (\x,\y) circle (#2) coordinate (-\i-\j);
        }
    }
}}}

\begin{document}

\begin{tikzpicture}

\pic (a) {gridd={fill=blue!20!white}{3mm}};

\begin{scope}[rotate around z=20]
\pic (b) {gridd={fill=red!80!white}{3mm}};
\end{scope}


\pic ["$\theta$",angle radius=1cm,draw,-stealth] {angle={a-2-2--a-c--b-2-2}};
\end{tikzpicture}

\end{document}

答案2

另一个选择是 tikz-Euclide。

\documentclass[tikz]{standalone}
\usepackage{pgfplots}
\usetikzlibrary{arrows,shapes,backgrounds,fit,decorations.pathreplacing,chains,snakes,positioning}  
\usepackage{amsmath,amssymb,bm}
\usepackage{tkz-euclide} %%% ADDED
\tikzset{
pics/gridd/.style n args={2}{
code = {%
    \def \s{0.5}
    \def \nx{3}
    \def \ny{2}
    \def \dx{3}
    \def \dy{3}
    \def \meshthickness{0.01}
    \pgfmathsetmacro \maxposx {\dx*(\nx-1)/2}   
    \pgfmathsetmacro \maxposy {\dy*(\ny-1)/2}

    \draw[line width = 0.2mm] (0, \maxposy) -- (0, \maxposy + 0.8);

    \filldraw[black] circle (2pt); 

    \draw [dashed, line width = 0.2mm] (-\maxposx,\maxposy) -- (\maxposx,\maxposy);
    \draw [dashed, line width = 0.2mm] (\maxposx,\maxposy) -- (\maxposx,-\maxposy);
    \draw [dashed, line width = 0.2mm] (-\maxposx,-\maxposy) -- (\maxposx,-\maxposy);
    \draw [dashed, line width = 0.2mm] (-\maxposx,-\maxposy) -- (-\maxposx,\maxposy);
    \draw [dashed, line width = 0.2mm] (0,-\maxposy) -- (0,\maxposy);

    \foreach \i in {1,...,\nx}{
        \foreach \j in {1,...,\ny}{
            \pgfmathsetmacro \x {(\i - (\nx + 1)/2)*\dx}        
            \pgfmathsetmacro \y {(\j - (\ny + 1)/2)*\dy}
            \filldraw[#1, draw=black, line width = 0.2mm] (\x,\y) circle (#2);
        }
    }
}}}

\begin{document}

\begin{tikzpicture}
\tkzDefPoints{-0.8/2.1/A, 0/2.3/B}; %ADDED
\draw[stealth-stealth] (A) -- (B); % ADDED
\tkzLabelSegment[sloped](A,B) {$\theta$}; %ADDED
\pic {gridd={fill=blue!20!white}{3mm}};

\begin{scope}[rotate around z=20]
\pic {gridd={fill=red!80!white}{3mm}};
\end{scope}

\end{tikzpicture}

\end{document}

相对于你的点定义 A en B 可以使其起作用。 在此处输入图片描述

相关内容