给定两个节点,如何定义自定义边缘样式来绘制圆弧而不是连接两个节点的线段?

给定两个节点,如何定义自定义边缘样式来绘制圆弧而不是连接两个节点的线段?

给定两个点 A 和 B(左),我需要绘制一条如下所示的光束:

在此处输入图片描述即,圆弧的端点由节点定义,并且我可以指定某个特定的角度。

例如使用在 tikz-er 中绘制带有开放圆弧的自定义边缘作为一个相关的起点,我或许可以用来生成上述

\draw[very thick,blue] (A.center) edge[supset] (B.center);

答案1

这是一种beam={<color>}{<angle>}可以在\draw命令中使用的样式。

在此处输入图片描述

使用show path construction(来自decorations.pathreplacing库),您可以引用(\tikzinputsegmentfirst)(\tikzinputsegmentlast),它们是给定路径的起点和终点。坐标$(\tikzinputsegmentlast)-(\tikzinputsegmentfirst)$(使用calc库)是从起点到终点的“矢量”。

该命令let\p1=(<coordinate>)自动将 x 和 y 坐标分配给\x1\y1

atan2使用计算反正切,从而得出弧线端点的坐标。使用 计算矢量的长度。如果要将端点延长 4 毫米,或者希望长度按 1.5 倍缩放,则veclen可以使用。\n2={veclen(\x1,\y1)+4mm}\n2={1.5*veclen(\x1,\y1)}

\documentclass{article}

\usepackage{tikz}
\usetikzlibrary{decorations.pathreplacing, calc}

\tikzset{
    beam/.style 2 args={
        decorate,
        decoration={show path construction, 
            lineto code={
                \fill[opacity=.5, #1] 
                let\p1=($(\tikzinputsegmentlast)-(\tikzinputsegmentfirst)$), 
                \n1={atan2(\y1,\x1)}, \n2={veclen(\x1,\y1)} in 
                (\tikzinputsegmentfirst)--($(\tikzinputsegmentfirst)+(\n1-.5*#2:\n2)$) 
                arc (\n1-.5*#2:\n1+.5*#2:\n2)--cycle;
            }
        }
    },
    beam/.default={black}{90},
    dot/.style={fill, circle, gray, minimum size=2mm, inner sep=0pt}
}


\begin{document}

\begin{tikzpicture}

\node[dot, label=below:A](A) at (0,0){};
\node[dot, label=above:B](B) at (-1,1){};
\node[dot, label=above:C](C) at (1,1){};

\draw[beam={orange}{60}](A.center)--(B.center);
\draw[beam={red}{30}](A.center)--(C.center);

\end{tikzpicture}

\end{document}

相关内容