我想选择性地显示 TikZ 的装饰线条expanding waves
。默认情况下,装饰会产生等距线条(来自下面的 MWE)
也就是说,我不想显示所有线条,而只显示一些线条,以显示波随着距离原点的距离而衰减:随着距离原点的距离增加,线条变得越来越稀疏。如下图所示:
我还想知道另一件事,我们是否可以根据与原点的距离缩放扩展波的线宽。例如,原点附近的线较粗,随着波远离原点,线会变细。
任何其他方法都可以,比如使用不同的库。
\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{decorations.pathreplacing}
\begin{document}
\begin{tikzpicture}[remember picture,overlay,thick]
\draw [decoration={expanding waves,angle=55,segment length=2mm},decorate,draw,color=red](0,0) -- (0,3);
\end{tikzpicture}
\end{document}
答案1
使用指数函数的解决方案。它并不简单,但可以通过多种方式配置。
\begin{tikzpicture}
%% Setting the central point
\coordinate (pc) at (0,0);
%% Defining the wave opening angle
\def\opAng{120.0}
%% Defining the direction of the waves
\def\dirAng{90.0}
%% Setting the starting radius
\def\initRad{1.0}
%% Defining the final radius
\def\endRad{3.0}
%% Setting the number of lines
\def\nroWav{9}
%% Defining the aspect
\def\raz{0.25}
%% Defining the smallest line width
\def\minLineWidth{0.4}
%% Setting the largest line width
\def\maxLineWidth{1.2}
\begin{scope}[rotate around ={\dirAng:(pc)}]
\foreach \x in {1,...,\nroWav}{
\pgfmathsetmacro\r{\endRad-((\endRad-\initRad)* (1-exp(\raz*(1-\nroWav)))^-1 )* (1-exp(\raz*(\x-\nroWav))) }
\pgfmathsetmacro\cx{\r*cos(0.5*\opAng)}
\pgfmathsetmacro\cy{\r*sin(0.5*\opAng)}
\pgfmathsetmacro\lw{\maxLineWidth-(\maxLineWidth-\minLineWidth)*\x*\nroWav^-1}
\draw[red, line width =\lw] (pc) +(\cx,\cy) arc (0.5*\opAng:-0.5*\opAng:\r);
}
\end{scope}
\end{tikzpicture}