有问题
我想用 来arrows.meta
解释“事件”(用 表示Rays
)会随着时间推移停止箭头所表示的“流动”。到目前为止,我几乎得到了我想要的,但是...
...但我怎么能
- 从 Rays 到 Tee Barb 的部分
dotted
? - 从 Rays 到 Tee Barb 的部分是空的,就像视觉TikZ,第 22 页(页面底部)?
- A相对的放置(即按百分比更精确地对齐,相当于
midway
或pos=.5
)射线(而sep=0.50cm
不是与line width=.1cm
)。
平均能量损失
\documentclass[tikz]{standalone}
\usetikzlibrary{arrows.meta}
\begin{document}
\tikz
\draw[-{Tee Barb},line width=.1cm,blue] (0,0) - - (1.5,1) ;
\tikz
\draw[-{Rays[n=8,sep=0.50cm, orange] },line width=.1cm,blue] (0,0) - - (1.5,1) ;
%-------- position of Rays vary in cm, not in relative to
\tikz
\draw[-{Rays[n=8,sep=0.10cm, orange] },line width=.1cm,blue] (0,0) - - (1.5,1) ;
\tikz
\draw[-{Rays[n=8,sep=0.50cm, orange] },line width=.1cm,blue] (0,0) - - (1.5,1) ;
\tikz
\draw[-{Rays[n=8,sep=0.90cm, orange] },line width=.1cm,blue] (0,0) - - (1.5,1) ;
\end{document}
答案1
第二个问题的答案是“添加一个点”,因此您需要-{Rays[n=8,sep=0.50cm, orange].Tee Barb}
。要解决第一个和第三个问题,可以定义一个带有预处理功能的样式。可以使用 将其设置为一种样式\ifpgfmathunitsdeclared
。如果第二个参数有单位,则实线将缩短该距离。如果没有单位,则将绘制到线的相应部分。请注意,这计算了到箭头尖端的距离。
\documentclass[tikz,border=3mm]{standalone}
\usetikzlibrary{arrows.meta,calc,decorations.pathreplacing}
\tikzset{event stopping/.style 2 args={decorate,
decoration={show path construction,
moveto code={},
lineto code={
\draw[#1,dashed,-{Tee Barb}] (\tikzinputsegmentfirst) -- (\tikzinputsegmentlast);
\pgfmathparse{#2}%
\ifpgfmathunitsdeclared
\draw[#1,-{Rays[n=8,orange]},shorten >=#2] (\tikzinputsegmentfirst) -- (\tikzinputsegmentlast);
\else
\draw[#1,-{Rays[n=8,orange]},shorten >=0pt] (\tikzinputsegmentfirst)
-- ($(\tikzinputsegmentfirst)!#2!(\tikzinputsegmentlast)$);
\fi
},
curveto code={},
closepath code={},
}}}
\usetikzlibrary{arrows.meta}
\begin{document}
\begin{tikzpicture}
\begin{scope}
\draw[-{Rays[n=8,sep=0.50cm, orange].Tee Barb},line width=.1cm,blue]
(0,0) -- (1.5,1);
\end{scope}
\begin{scope}[xshift=2cm]
\draw[event stopping={line width=.1cm,blue}{0.5cm}] (0,0) -- (1.5,1);
\end{scope}
\begin{scope}[xshift=4cm]
\draw[event stopping={line width=.1cm,blue}{0.6}] (0,0) -- (1.5,1);
\end{scope}
\end{tikzpicture}
\end{document}