![给定两个节点,如何定义自定义边缘样式来绘制圆弧而不是连接两个节点的线段?](https://linux22.com/image/470263/%E7%BB%99%E5%AE%9A%E4%B8%A4%E4%B8%AA%E8%8A%82%E7%82%B9%EF%BC%8C%E5%A6%82%E4%BD%95%E5%AE%9A%E4%B9%89%E8%87%AA%E5%AE%9A%E4%B9%89%E8%BE%B9%E7%BC%98%E6%A0%B7%E5%BC%8F%E6%9D%A5%E7%BB%98%E5%88%B6%E5%9C%86%E5%BC%A7%E8%80%8C%E4%B8%8D%E6%98%AF%E8%BF%9E%E6%8E%A5%E4%B8%A4%E4%B8%AA%E8%8A%82%E7%82%B9%E7%9A%84%E7%BA%BF%E6%AE%B5%EF%BC%9F.png)
给定两个点 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}