免责声明
我不是程序员,所以我可能没有使用正确的术语来表达自己。如有需要,请纠正我。
前言
我正在尝试绘制一个正弦函数和一些箭头,这些箭头位于特定点(位于函数的参考横坐标上),箭头的长度由该点处的函数值决定。在每个点处,我还会画一个小圆圈来突出显示该点本身。
问题陈述
为了实现这一点,我想使用一个\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))))
并且是必要的,以避免舍入为零。int
ceil
abs
\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}