绘制与节点正交的边

绘制与节点正交的边

我想知道是否有一种自动生成与节点正交的边的方法。这在节点自动旋转时尤其有用。例如:

在此处输入图片描述

我想将节点“长文本”与“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}

在此处输入图片描述

相关内容