TikZ-ifthen:在 \foreach 语句中做出决策

TikZ-ifthen:在 \foreach 语句中做出决策

免责声明

我不是程序员,所以我可能没有使用正确的术语来表达自己。如有需要,请纠正我。

前言

我正在尝试绘制一个正弦函数和一些箭头,这些箭头位于特定点(位于函数的参考横坐标上),箭头的长度由该点处的函数值决定。在每个点处,我还会画一个小圆圈来突出显示该点本身。

问题陈述

为了实现这一点,我想使用一个\foreach语句。但是,如果我在函数值为零的点处绘制箭头,我仍然会得到一个箭头——只是为了清楚起见,我不想要那样。

为了避免这种情况,我尝试使用该\ifthen包,并强制执行类似

“如果 sin(x) 不为 0,则画箭头...”

但在所有情况下都绘制(实心)圆圈

但我收到了一个错误。

有人能帮助我吗?

\documentclass{article}
\usepackage{tikz,ifthen}
\begin{document}
What I have now:

\begin{tikzpicture}[>=latex]
  \draw [thick,dashed] plot [domain=-2*pi:2*pi,samples=100] (\x,{sin(\x r)});
  \foreach [evaluate={\y=\x*pi;\z=sin(\y r);}] \x in {-2,-1.5,...,2} {
    \fill (\y,0) circle (1.5pt);
    %\ifthenelse{\NOT \z=0}{\draw [->,thick] (\y,0) -- +({-sin(\y r)},0);}{};
    \draw [->,thick] (\y,0) -- +({-sin(\y r)},0);
  }
\end{tikzpicture}

What I am trying to achieve:

\begin{tikzpicture}[>=latex]
  \draw [thick,dashed] plot [domain=-2*pi:2*pi,samples=100] (\x,{sin(\x r)});
  \foreach [evaluate={\y=\x*pi;}] \x in {-1.5,-0.5,...,1.5} {
    \fill (\y,0) circle (1.5pt);
    \draw [->,thick] (\y,0) -- +({-sin(\y r)},0);
  }
  \foreach [evaluate={\y=\x*pi;}] \x in {-2,...,2}
    \fill (\y,0) circle (1.5pt);
\end{tikzpicture}
\end{document}

在此处输入图片描述

答案1

问题基本上与\ifnum 和 pgfmath:错误我认为。\z不会是整数,因此比较失败。您可以\z使用使其成为整数。\z=int(ceil(abs(sin(\y r))))并且是必要的,以避免舍入为零。intceilabs

在此处输入图片描述

\documentclass{article}
\usepackage{tikz,ifthen}
\begin{document}
What I have now:

\begin{tikzpicture}[>=latex]
  \draw [thick,dashed] plot [domain=-2*pi:2*pi,samples=100] (\x,{sin(\x r)});
  \foreach [evaluate={\y=\x*pi;\z=int(ceil(abs(sin(\y r))));}] \x in {-2,-1.5,...,2} {
    \fill (\y,0) circle (1.5pt);
    \ifthenelse{\NOT\z=0}{\draw [->,thick] (\y,0) -- +({-sin(\y r)},0);}{};
  }
\end{tikzpicture}

What I am trying to achieve:

\begin{tikzpicture}[>=latex]
  \draw [thick,dashed] plot [domain=-2*pi:2*pi,samples=100] (\x,{sin(\x r)});
  \foreach [evaluate={\y=\x*pi;}] \x in {-1.5,-0.5,...,1.5} {
    \fill (\y,0) circle (1.5pt);
    \draw [->,thick] (\y,0) -- +({-sin(\y r)},0);
  }
  \foreach [evaluate={\y=\x*pi;}] \x in {-2,...,2}
    \fill (\y,0) circle (1.5pt);
\end{tikzpicture}
\end{document}

相关内容