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