当使用该\draw let ... in
语法在两条线之间构造圆弧时,即使圆弧的焦点不是原点,圆弧也会被放置在正确的位置。然而,节点放置情况并非如此。
例如,考虑以下代码:
\documentclass{standalone}
\usepackage{tikz}
\usetikzlibrary{calc}
\begin{document}
\begin{tikzpicture}
\coordinate (F) at (2, 0);
\draw (F) -- ++(30:1cm and 2cm) coordinate (A);
\draw (F) -- ++(100:1cm) coordinate (P3);
\draw let
\p0 = (F),
\p1 = (A),
\p2 = (P3),
\n1 = {atan2(\x1 - \x0, \y1 - \y0)},
\n2 = {atan2(\x2 - \x0, \y2 - \y0)},
\n3 = {1cm},
\n4 = {(\n2 - \n1) / 2}
in (F) +(\n1:\n3) arc[radius = \n3, start angle = \n1, end angle = \n2]
node[scale = .75, fill = white, inner sep = 0cm] at
(\n4:\n3) {\(\nu_A\)};
\end{tikzpicture}
\end{document}
得出的结果为:
如果我xshift = 2
这个节点,我会得到:
我不明白为什么节点位置不沿着圆弧,因为我指定的位置(\n4:\n3)
是圆弧角度的一半,半径相同。也就是说,它应该沿着与两条线等距的圆弧。
如果添加到节点选项pos = .5
,节点仍然没有放置在预期的位置。
对于这种情况,正确的节点语法是什么\draw let .. in
?
答案1
不幸的是,正如已经讨论过的如何将节点放置在圆弧的中间?节点不能沿着arc
s 放置。因此,只需使用 noat
并添加pos=.5
(或就此而言的任何其他位置)即可将节点放置在原点,TikZ 只是不知道更好的方法。
那么你的代码中有两个问题:首先,你将 定义\n4
为 的一半\n2 - \n1
,尽管角平分线是.5*(\n2+\n1)
。
然后,放置节点at (\n4:\n3)
,它是绝对坐标,与圆弧的中心没有任何关系(F)
。我们可以at +(\n4:\n3)
在这里使用,但相对坐标所在的最后一个坐标是 的末尾arc
,但仍然不是(F)
。
我们需要在这里使用at ([shift=(F)] \n4:\n3)
或(F) +(\n4:\n3) node …
(→TikZ:当我想从原点以外的点引用时,节点放置出现问题)。
正如已经评论的那样贡萨洛·梅迪纳在他的评论最好使用font
来改变节点文本的字体大小而不是选项scale
。
您也已经熟悉了该decorations.markings
库,它在不同情况下可能会更有用。
代码
\documentclass[tikz,convert=false]{standalone}
\usetikzlibrary{calc,decorations.markings}
\begin{document}
\begin{tikzpicture}
\coordinate (F) at (2, 0);
\draw (F) -- ++(30:1cm and 2cm) coordinate (A);
\draw (F) -- ++(100:1cm) coordinate (P3);
\draw let
\p0 = (F),
\p1 = (A),
\p2 = (P3),
\n1 = {atan2(\x1 - \x0, \y1 - \y0)},
\n2 = {atan2(\x2 - \x0, \y2 - \y0)},
\n3 = {1cm},
\n4 = {(\n2 + \n1) / 2}
in (F) +(\n1:\n3) arc[radius = \n3, start angle = \n1, end angle = \n2]
node[fill = white, inner sep = 0cm, font=\small] at ([shift=(F)] \n4:\n3) {\(\nu_A\)}
% [decoration={name=markings,mark=at position .5 with {\node [inner sep=+0cm,font=\small,fill=white] {$\nu_A$};}},postaction=decorate]
;
\end{tikzpicture}
\end{document}