根据边的斜率定位标签节点

根据边的斜率定位标签节点

我正在创建一组带有 的节点foreach。之后,我在它们之间画一条边,该边应该在线上方的中间显示一个值。不幸的是,在某些情况下,线会穿过该值,在这种情况下它应该向左或向右移动。我正在尝试找到一种方法来向节点的样式添加一个取决于边的斜率的条件,但到目前为止我还没有成功。我的代码

\documentclass{article}
\usepackage{tikz}

\begin{document}
\begin{tikzpicture}

\foreach \nodename/\xcor/\ycor in { A/1/1,  B/1/4,  C/4/1,  D/4/4}      
    \node (\nodename) at (\xcor,\ycor) [circle,draw=black,fill=white,thick] {\textbf{\nodename}};

\foreach \from/\to/\lengthvalue in {A/B/1, A/C/2, A/D/3 }
    \draw  (\from) -- (\to) node[pos=0.5,above right] {\textbf{\lengthvalue}};

\end{tikzpicture}
\end{document}

创建

在此处输入图片描述

我最终总是会在一行上写一个数字。如果我使用above行,AB 就是那个。不幸的是,slope这里没有选择。有没有办法有条件地使用above, above left, above right

答案1

也许auto节点选项有帮助:

\documentclass{article}
\usepackage{tikz}

\begin{document}
\begin{tikzpicture}

\foreach \nodename/\xcor/\ycor in { A/1/1,  B/1/4,  C/4/1,  D/4/4}      
    \node (\nodename) at (\xcor,\ycor) [circle,draw=black,fill=white,thick] {\textbf{\nodename}};

\foreach \from/\to/\lengthvalue in {A/B/1, A/C/2, A/D/3}{
    \draw  (\from) -- (\to) node[midway,auto=left] {\textbf{\lengthvalue}};}

\end{tikzpicture}
\end{document}

在此处输入图片描述

E或者在以下位置添加一个节点(10,4.5)

在此处输入图片描述

答案2

可能不是你想要的,但对我来说似乎更简单:

(旋转怎么样?)

\documentclass{article}
\usepackage{tikz}

\begin{document}
\begin{tikzpicture}

\foreach \nodename/\xcor/\ycor in { A/1/1,  B/1/4,  C/4/1,  D/4/4}      
    \node (\nodename) at (\xcor,\ycor) [circle,draw=black,fill=white,thick] {\textbf{\nodename}};

\foreach \from/\to/\lengthvalue in {A/B/1, A/C/2, A/D/3 }{
    \draw  (\from) -- (\to) node[midway,rotate around={10:(\from)},rotate=-10] {\textbf{\lengthvalue}};}

\end{tikzpicture}
\end{document}

在此处输入图片描述

第一次旋转是围绕起点旋转,第二次旋转只是围绕自身旋转节点。

如果需要条件也是一个选择(我会计算角度来做到这一点)

相关内容