给定两个点 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}