Tikz 图片使用两个“foreach”循环

Tikz 图片使用两个“foreach”循环

我正在使用制作图片foreach。MWE 附加在下面

\documentclass{article}

\usepackage[svgnames]{xcolor}
\usepackage{tikz}

\begin{document}

\begin{tikzpicture}

 \foreach \x in {0,...,5}
    \draw [DodgerBlue](\x,-1) circle (0.25);

\foreach \x in {0,...,5}
    \draw [-latex,red](\x,-1) -- (\x,-1.5);

\foreach \x in {0,...,5}
    \draw [-latex,DarkGreen](\x,-1) -- (\x,-0.5);

\draw [ultra thin] (5,-0.5) -- (0,-1);

\end{tikzpicture}

\end{document}

结果图片附在下面

enter image description here

现在我想要的是顶部的绿色箭头应该被黑线对角线限制。也就是说,第一个圆圈不应该有绿色箭头,它的长度应该增加,直到它等于最后一个圆圈中的红色箭头。如何使用foreach变量来实现这\y一点。有没有办法,黑色对角线与绿色箭头的交点可以用来将绿色箭头的长度限制为所需的值?或者还有其他方法可以实现这一点吗?

答案1

如果您不想进行分析计算(或者您没有该线的简单参数化)。

\documentclass{article}

\usepackage[svgnames]{xcolor}
\usepackage{tikz}
\usetikzlibrary{calc}
\begin{document}

\begin{tikzpicture}

 \foreach \x in {0,...,5}
    \draw [DodgerBlue](\x,-1) circle (0.25);

\foreach \x in {0,...,5}
    \draw [-latex,red](\x,-1) -- (\x,-1.5) ;

\draw [ultra thin] (5,-0.5) coordinate(aux0)  -- (0,-1) coordinate(aux1);

\foreach \x in {1,...,5}
    \draw [-latex,DarkGreen] (\x,-1) coordinate(aux2) (\x,-0.5) coordinate(aux3)
    (aux2) -- (intersection cs:first line={(aux2)--(aux3)}, 
    second line={(aux0)--(aux1)});


\end{tikzpicture}

\end{document}

enter image description here

为了让@ArtificialStupidity 高兴(?)一个循环......

\documentclass[border=3.14mm]{standalone}
\usepackage[svgnames]{xcolor}
\usepackage{tikz}
\usetikzlibrary{calc}
\begin{document}
\begin{tikzpicture}
\draw [ultra thin] (5,-0.5) coordinate(aux0)  -- (0,-1) coordinate(aux1);
\foreach \x in {0,...,5}
   { \draw [DodgerBlue](\x,-1) circle (0.25);
    \draw [-latex,red](\x,-1) -- (\x,-1.5) ;
    \unless\ifnum\x=0%    
    \draw [-latex,DarkGreen] (\x,-1) coordinate(aux2) (\x,-0.5) coordinate(aux3)
    (aux2) -- (intersection cs:first line={(aux2)--(aux3)}, 
    second line={(aux0)--(aux1)});
    \fi
    }
\end{tikzpicture}
\end{document}

答案2

您可以使用简单的线性函数。请注意,您的箭头在比例尺中相当大。选择更大的比例或使用另一个箭头尖可能是一个好主意,以便更好地表示第二种情况。

linear function

\documentclass{article}

\usepackage[svgnames]{xcolor}
\usepackage{tikz}

\begin{document}

\begin{tikzpicture}

\foreach \x in {0,...,5}{
  \draw [DodgerBlue](\x,0) circle (0.25);
  \draw [-latex,red](\x,0) -- (\x,-.5);
}
\foreach \x in {1,...,5}{
    \draw [-latex,DarkGreen](\x,0) -- (\x,{0.1*\x});
}

\draw [ultra thin] (5,.5) -- (0,0);

\end{tikzpicture}

\end{document}

答案3

只有一个循环的 PSTricks 解决方案仅用于比较目的。

\documentclass[pstricks]{standalone}
\usepackage{pst-calculate}
\begin{document}
\begin{pspicture}[arrowsize=.2,arrowinset=0,linewidth=1pt](8.5,\pscalculate{8/3})
        \foreach \i in {0,1,...,5}{%
            \pstVerb{/x {\i\space  1.5 mul .5 add} def}%
            \pscircle[linecolor=blue](!x 1){.5}
            \psline[linecolor=red]{->}(!x 1)(!x 0)
            \ifnum\i=0\relax\else\psline[linecolor=green]{->}(!x 1)(!x \i\space 3 div 1 add)\fi
        }
        \psline[linestyle=dashed](.5,1)(!8 dup 3 div)
\end{pspicture}
\end{document}

enter image description here

答案4

像这样(请注意\foreach \x in {1,...,5}而不是\foreach \x in {0,...,5}

\documentclass{article}

\usepackage[svgnames]{xcolor}
\usepackage{tikz}

\begin{document}

\begin{tikzpicture}

 \foreach \x in {0,...,5}
    \draw [DodgerBlue](\x,-1) circle (0.25);

\foreach \x in {0,...,5}
    \draw [-latex,red](\x,-1) -- (\x,-1.5);

%\foreach \x in {0,...,5}
 %   \draw [-latex,DarkGreen](\x,-1) -- (\x,-0.5);
\foreach \x in {1,...,5}
\draw [-latex,DarkGreen](\x,-1) -- (\x,-1+0.1*\x);

\draw [ultra thin] (5,-0.5) -- (0,-1);

\end{tikzpicture}

\end{document}

enter image description here

相关内容