一个月前我在群里给出的方案是:
- 把全路径划分为多个子路径,预先保存中间顶点
- “均匀”的添加箭头,只要保证子路径使用
middle arrow=0.5的默认值即可 - 利用
bengding,ext.arrows,ext.arrows-plus库提供的\arrow**{ext_Centered Stealth[bend]}}来准确的控制箭头的位置和正确的弯曲
\documentclass[tikz,border=3pt]{standalone}
\usepackage{lete-sans-math}
\usetikzlibrary{bending,arrows.meta,decorations.markings,ext.arrows,ext.arrows-plus}
\tikzset{
middle arrow/.style={
semithick,postaction={decorate},
decoration={markings,mark=at position #1 with {\arrow**{ext_Centered Stealth[bend]}}}
},middle arrow/.default={0.5}
}
\begin{document}
\begin{tikzpicture}[>=Stealth]
\def\ang{17.5}\def\R{2.5}
\pgfmathsetmacro{\r}{2*\R*sin(\ang/2)}
\draw[thick,fill=gray!30]
({\R-\r},0) coordinate (A)
arc (180:{90+\ang/2}:\r) coordinate (B)
arc (\ang:{90-\ang}:\R) coordinate (C)
arc ({-\ang/2}:{-180+\ang/2}:\r) coordinate (D)
arc ({90+\ang}:{180-\ang}:\R) coordinate (E)
arc ({90-\ang/2}:0:\r) coordinate (F)
-- cycle;
\path[middle arrow=0.4] (F) -- (A);
\path[middle arrow] (A) arc (180:{90+\ang/2}:\r);
\path[middle arrow] (B) arc (\ang:{90-\ang}:\R);
\path[middle arrow=0.6] (C) arc ({-\ang/2}:{-180+\ang/2}:\r);
\path[middle arrow] (D) arc ({90+\ang}:{180-\ang}:\R);
\path[middle arrow] (E) arc ({90-\ang/2}:0:\r);
\fill[radius=2pt]
(-\R,0) circle[] node[below] {$(-1,0)$}
(+\R,0) circle[] node[below] {$(1,0)$}
(0,+\R) circle[] node[above] {$(0,1)$}
;
\draw[->] (-3,0) -- (3,0) node[right] {$\Re$};
\draw[->] (0,-.5) node[above left] {$O$} -- (0,3.5) node[above] {$\Im$};
\end{tikzpicture}
\end{document}不过这样其实似乎涉嫌重复绘制各段路径...
\path[middle arrow] (A) arc (180:{90+\ang/2}:\r);
\path[middle arrow] (B) arc (\ang:{90-\ang}:\R);
\path[middle arrow=0.6] (C) arc ({-\ang/2}:{-180+\ang/2}:\r);
\path[middle arrow] (D) arc ({90+\ang}:{180-\ang}:\R);
\path[middle arrow] (E) arc ({90-\ang/2}:0:\r);
放大看看细节:

不知道是否有更好的方案...






















问 绘制围道时,处理均匀地添加曲线上的箭头的最佳实践?