截断 tikz 蛇形装饰而不改变频率

截断 tikz 蛇形装饰而不改变频率

我想画一张波穿过一个物体(好吧,是几个物体)的图。或者在某些情况下看起来像是穿过一个空心圆柱体。由于所有这些都投射到 2d 平面上,因此这种效果实际上是在某个点停止绘制波。

我一直在使用蛇形装饰来做到这一点,但似乎如果我想要绘制的两个点之间的距离不是波的频率的整数倍,那么蛇的末端就会出现一条直线段。

关于这个问题已经有多个问题和解决方案,但所有给出的解决方案都涉及改变波的频率来拉伸或挤压波,以便 $n$ 个周期的波适合间隙。(这里这里这里, 和这里, 例如。)

从技术上讲,我绘制的波形应该始终具有恒定的频率,因此我真正想要的是一种截断波形的方法,而不管波形在周期中的哪个点结束。我尝试在下面说明这一点:

% straight line at end of snake
\draw [decorate, decoration=snake] (0,0) -- (1.2,0);
% changing the frequency to fit wave path length:
\draw [decorate, decoration=snake, segment length=13] (0,-1) -- (1.2,-1); 
% the effect I'm after, truncated snake at any amplitude:
\draw [decorate, decoration=snake] (0,-2) -- (2,-2);
\fill [white] (1.2,-2.2) rectangle (2.1,-1.8);

我希望我已经表达清楚了,如果需要的话,请要求进一步澄清。

答案1

实际上,您可以将波绘制为正弦函数。然后,您可以设置要显示的确切函数并绘制它。波可以描述为

y(x) = A*sin(w*x + b)

因此,您可以将其绘制为\draw[domain=C:D] plot (\x,{A*sin(w*\x r + br)});,其中r代表弧度。哎呀,您甚至可以为此创建一个命令,将所有内容立即转换为弧度:

\newcommand{\sinewave}[4][]{\draw[#1]  plot (\x,{#2*sin((#4*pi/180)r + 2*pi*#3*\x r)})}

这里你得到一个类似 的命令\sinewave[tikz options]{Amplitude}{Frequency, in Hz}{Phase angle, in degrees}。该domain选项设置正弦波的开始和结束,并samples设置波的“平滑度”。

以下是完整的 MWE:

\documentclass[tikz,border=5mm]{standalone}

\newcommand{\sinewave}[4][]{\draw[#1]  plot (\x,{#2*sin((#4*pi/180)r + 2*pi*#3*\x r)})}

\begin{document}
\begin{tikzpicture}[domain=0:1.2, samples=120]
\draw plot (\x,{0.1*sin(10*\x r)});
\draw[yshift=-1cm] plot (\x,{0.15*sin(13*\x r)});
\sinewave[yshift=-2cm]{0.2}{4}{90};
\end{tikzpicture}
\end{document}

编译结果

答案2

Guilherme 的回答很好。另一种解决方案是使用密钥shorten >=

\documentclass[letterpaper]{article}
\usepackage{tikz}
\usetikzlibrary{shapes.geometric, snakes}

\begin{document}
\footnotesize
\begin{tikzpicture}[thin]

\draw[snake=coil, segment aspect=0, color=red, semithick]%
     (0.5in,2in) -- ++(0.375in,-0.75in);

\draw[snake=coil, segment aspect=0, color=blue, semithick, shorten >= 5pt]%
     (1in,2in) -- ++(0.375in,-0.75in);

\end{tikzpicture}
\end{document}

不过,它确实需要摆弄您为该键使用的确切值。

在此处输入图片描述

相关内容