破坏显示的节点命令

破坏显示的节点命令

我有一段代码指示TikZ绘制以 为中心的同心圆O。我还在这些圆上绘制了 80 度的圆弧。使用命令\node (O) at ($(O) + (-90:10pt)$) {$O$};,圆心发生了移动;我认为标签O放在了两个圆的中心。为什么会发生这种情况?我只想将O10pt 放在原点下方。

\documentclass{amsart}
\usepackage{tikz}
\usetikzlibrary{calc,angles}

\begin{document}

\begin{tikzpicture}

\coordinate (O) at (0,0);
\draw[fill] (O) circle (1.5pt);
%\node (O) at ($(O) + (-90:10pt)$) {$O$};

\coordinate (A) at ($(O) + (80:1)$);
\coordinate (B) at ($(O) + (80:2)$);

\draw (O) -- (B);
\draw (O) -- ($(O) + (0:2)$);

\draw (O) circle (1);
\draw (O) circle (2);

\draw[line width=1.6pt] (1,0) arc (0:80:1);
\node (angle-label) at ($(O)+(40:10pt)$) {$\scriptstyle{80}$};

\end{tikzpicture}

\end{document}

答案1

@Maarten 已经回答了你关于为什么事情会出错的问题。节点名称是对坐标的引用。当你用现有名称命名某个东西时,你基本上会更改它所引用的坐标。

此处取消注释后,其余代码将使用 的新位置(O)。但是,我擅自重构了代码,并且我反对使用 calc 这样的代码。因为有更简单的方法,即:

  • 从一个点到另一个点进行绘制,已知差异

    \draw (3,4) -- ++(-1,1); % <-- Draws to (2,5)
    \draw (1,1) -- ++(45:{sqrt(2)}); % <-- draws to (2,2)
    

    您可以在手册中找到更多详细信息,也可以在如何在 tikz 中向坐标添加偏移量?

  • 通过添加移位进行绘制

    \draw (0,0) -- ([xshift=1cm]0,0); % <-- draws to (1,0)
    \draw (1,1) -- ([yshift=1cm]0,2); % <-- draws to (0,3)
    

    你可以组合两个移位并给出任何有效的坐标表达式,但由于参数有括号和逗号,我们需要通过括号保护它

    \draw (0,0) -- ([shift={(90:1cm)}]1,1); %<-- draws to (1,2)
    

您还可以组合相对定位和移位,但首先解析坐标,然后添加移位

\draw (1,1) -- ++([yshift=-2cm]45:{sqrt(2)}); % <-- draws to (2,0)

因此,使用这些语法,您的代码可以简化为

\documentclass[tikz]{standalone}
\usetikzlibrary{angles,quotes}
\begin{document}

\begin{tikzpicture}
\coordinate[
    label={[circle,fill,inner sep=1pt]center:{}},
    label=-90:{$O$}] (O) at (0,0) {};
\draw (O) circle (2) (80:2) -- (O) circle (1) -- (0:2) ;
\coordinate (a) at (1,0) ;
\coordinate (b) at (80:1);

\pic[draw,line width=1.6pt,angle radius=1cm,"$\scriptstyle80$"] {angle = a--O--b};
\end{tikzpicture}
\end{document}

在此处输入图片描述

相关内容