我想知道是否有一种自动生成与节点正交的边的方法。这在节点自动旋转时尤其有用。例如:
我想将节点“长文本”与“C”连接起来,但让边(红色)与节点正交,就像 B 中那样。
\documentclass[border=5pt,convert={density=300,size=1080x800,outext=.png}]{standalone}
\usepackage{tikz}
\usetikzlibrary{calc, positioning}
\begin{document}
\begin{tikzpicture}
\node[rectangle,draw] (A) at (6,0) {A};
\node[rectangle,draw,rotate=+35] (B) at (2,-3) {B};
\node [rectangle,draw] (C) at (5,0) {C};
\path (A) edge [in=90+35,out=-90] node (long) [draw,midway,sloped,rotate=-90,fill=white] {long text} (B) ;
% I'd like to connect (long) with C having the edge orthogonal to both the nodes
\draw ($(long.north west)!.3!(long.north east)$) edge [in=-90,red] ($(C.south west)!.3!(C.south east)$);
\end{tikzpicture}
\end{document}
我尝试使用“相对”选项,但在这种情况下,入/出角度是相对于边缘的,而不是相对于节点的。
我也在在 tikz 中定义一个具有多个锚点的新矩形节点,但我认为它本身就值得提出问题。
附带问题:我不明白为什么从(B)出发的边缘不是从(B)的中心出发,而是稍微在它的左边。
答案1
根据您需要访问这些信息的频率,您可以创建一个数学函数等等,但基本思想是使用锚点或任何具有斜率的东西来获取方向。例如,您可以使用带有let
语法的前端。
\usetikzlibrary{calc}% In the preamble
\begin{tikzpicture}
\node[draw] (A) at (6,0) {A};
\node[draw,rotate=35] (B) at (2,-3) {B};
\node [draw] (C) at (5,0) {C};
\path (A) edge [in=90+35,out=-90]
node (long) [draw,midway,sloped,rotate=-90,fill=white] {long text} (B) ;
\draw let
\p1=($(long.north)-(long.north east)$),
\n1={atan2(\y1,\x1)}
in
($(long.north west)!.3!(long.north east)$) edge [in=-90,out=\n1-90,red]
($(C.south west)!.3!(C.south east)$);
\end{tikzpicture}