坐标位置不精确

坐标位置不精确
\documentclass{standalone}
\usepackage{tikz}
\usetikzlibrary{calc,intersections}
\usepackage{amsmath}

\begin{document}

\begin{tikzpicture}[scale=0.5]
\draw[<->] (0,12) node[above]{$w$} |- (12,0) node[right]{$q_L$};

\draw[dotted, name path = ACL] (0,0) plot [domain=0.7:9] (\x,0.75*\x + 0.8) node[label=right:{AC$_L$ = S$_L$}](A1){};
\coordinate (H) at ($({5.6/0.75},5.6) - ({0.8/0.75},0)$);
\draw[thick, blue, name path = ACLt] let \p1 = (H) in (0,\y1) node[left, red]{$w_u$} -- (\x1,\y1) --(A1);
\end{tikzpicture}   

\end{document}

我的问题如下:

  • 我试图在第一行(名称路径 ACL)的末尾定义一个坐标(A1)。
  • 然后我使用这个坐标(A1)作为第二行的最后一个坐标(名称路径ACLt)。

看起来坐标并不真正位于线的末端,因为虚线稍微延伸到了粗蓝线之外:

在此处输入图片描述

为什么会发生这种情况?

答案1

好吧,Zarko 把我的评论变成了“他的”答案,但这里再次重申:使用coordinate而不是node因为后者的大小是有限的(默认情况下)。我的答案和评论附带了一种可能更简单的路径构造。

\documentclass{standalone}
\usepackage{tikz}
\usetikzlibrary{calc,intersections}
\usepackage{amsmath}

\begin{document}

\begin{tikzpicture}[scale=0.5]
\draw[<->] (0,12) node[above]{$w$} |- (12,0) node[right]{$q_L$};

\draw[dotted, name path = ACL] (0,0) plot [domain=0.7:9] (\x,0.75*\x + 0.8) 
coordinate[label=right:{AC$_L$ = S$_L$}] (A1);
\coordinate (H) at ($({5.6/0.75},5.6) - ({0.8/0.75},0)$);
\draw[thick, blue, name path = ACLt] (0,0|-H) node[left, red]{$w_u$} -- (H) --(A1);
\end{tikzpicture}   

\end{document}

在此处输入图片描述

答案2

坐标的计算足够准确,问题在于你使用节点,用 替换节点,coordinate结果就会变成你想要的样子:

在此处输入图片描述

\documentclass{standalone}
\usepackage{tikz}
\usetikzlibrary{calc,intersections}
\usepackage{amsmath}

\begin{document}

\begin{tikzpicture}[scale=0.5]
\draw[<->] (0,12) node[above]{$w$} |- (12,0) node[right]{$q_L$};

\draw[dotted, name path = ACL]
    plot [domain=0.7:9] (\x,0.75*\x + 0.8) coordinate[label=right:{AC$_L$ = S$_L$}] (A1);
\coordinate (H) at ($({5.6/0.75},5.6) - ({0.8/0.75},0)$);
\draw[thick, blue, name path = ACLt] let \p1 = (H) in (0,\y1) node[left, red]{$w_u$} -- (\x1,\y1) --(A1);
\end{tikzpicture}

\end{document}

node和之间的差异coordinate是因为节点无论是否为空都具有一定的宽度。它由的默认值决定 inner sep。如果将其设置为零:inner sep=0pt结果将是相同的。

离题:在您的图表中您没有使用intersections库,因此您可以从代码中删除行名(正如我在上面所做的那样)

相关内容