如何在 \path 中的每个圆弧和线上绘制箭头?

如何在 \path 中的每个圆弧和线上绘制箭头?

当我绘制路径时:

 \path [draw=blue] 
 (0,0) 
 arc(-60:60:1.732) 
 arc(120:240:1.732);

我想在这个 \path 内的每个圆弧的中间添加一个箭头。

像这样:

在此处输入图片描述

我尝试过 decorators.pathreplacing 包中的“显示路径构造”(curveto 代码)样式。但是它不是在每个圆弧上创建装饰,而是每 90 度(或小于 90 度)创建装饰。这是因为“显示路径构造”中的“curveto 代码”为每条贝塞尔曲线创建装饰,而一个圆是由 4 条贝塞尔曲线创建的。

答案1

首先,我想告诉大家\path在整个图片中只使用一个不是受到推崇的,你应该真的\path如果绘制不同类型的线,请尽可能多地使用s。

如果要将多行压缩为单个\path,则需要类似 的edge操作。不幸的是,edge不接受arc或类似作为其选项,因此我在这里使用outin。因此,输出曲线并不完全是某些圆中的曲线。我希望它足够接近。

我也做了一些改进middlearrow风格做了一些改进Ferahfeza 的精彩回答,以便它可以处理节点。

\documentclass[tikz]{standalone}
\usetikzlibrary{decorations.markings}
\tikzset{
    middlearrow/.style n args={3}{
        draw,
        decoration={
            markings,
            mark=at position 0.5 with {
                \arrow{#1};
                \path[#2] node {$#3$};
            },
        },
        postaction=decorate
    }
}
\begin{document}
\begin{tikzpicture}[>=stealth]
\coordinate (x) at (0,0);
\coordinate (y) at (0,3);
\path (x)   edge[out=60,in=-60,middlearrow={<}{left}{b}] (y)
            edge[out=30,in=-30,middlearrow={>}{right}{s}] (y)
            edge[out=120,in=-120,middlearrow={<}{right}{a}] (y)
            edge[out=150,in=-150,middlearrow={>}{left}{r}] (y);
\end{tikzpicture}
\end{document}

在此处输入图片描述

答案2

\path为每个圆弧定义。

\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{decorations.markings}
\begin{document}
% Middlearrow code is from:
% https://tex.stackexchange.com/a/39283
\tikzset{middlearrow/.style={
        decoration={markings,
            mark= at position 0.5 with {\arrow{#1}} ,
        },
        postaction={decorate}
    }
}

\begin{tikzpicture}[line width=0.5mm,>=stealth]
 \path [draw=blue,middlearrow={>}] 
 (0,0) 
 arc(-60:60:1.732)coordinate (A) node[midway,right,yshift=-1mm]{$s$} ;

\path [draw=blue,middlearrow={<}] 
 (0,0) 
 arc(-30:30:3)node[midway,left,yshift=-0.75mm]{$b$};

 \path [draw=blue,middlearrow={>}] 
 (0,0) 
 arc(240:120:1.732)node[midway,left,yshift=-1mm]{$r$} ;

 \path [draw=blue,middlearrow={<}] 
 (0,0) 
 arc(210:150:3)node[midway,right,yshift=-1mm]{$a$} ;

\fill [blue] (0,0) circle (2pt);
\fill [blue] (A) circle (2pt);
\end{tikzpicture}
\end{document}

在此处输入图片描述

相关内容