答案1
TikZ 用于绘制弧的 PGF 级别的宏\pgfpatharc
使用度数,因为它在某些地方使用数字 90:
与 PGF/TikZ 中的任何非直线一样,弧将转换为贝塞尔曲线,控制点与给定角度正交,其中将使用数字 90。这似乎是为什么你甚至没有得到弧,而是某种抛物线的原因。(在其他一些点上,将使用tan
函数或,\pgfpointpolar
它应该可以正确地与弧度配合使用。)
该手册还警告说,这种情况可能会发生
在撰写本文时,此功能处于“实验性”阶段。请谨慎处理:PGF 中可能存在依赖于 的路径指令或库
trig format=deg
。 的预期用途trig format=rad
是用于本地范围 - 并作为数据可视化的选项。
这似乎是其中一个案例。
我建议在的情况下总是使用度数arc
,在这个简单的情况下,您可以r
毫无困难地使用后缀运算符:
\draw[red, dashed, thick] (0:1) arc(0:pi r:1);
但是,该arc ()
语法已被弃用很长时间,它应该是:
\draw[green, dashed] (0:1) arc[start angle=0, end angle=pi r, radius=1];
您还可以在此处使用这些deg()
功能,而不必保护)
。
尽管如此,我还是提出了一个小的修复方法,将\pgfpatharc
所有内容转换为度数,并且只以度为单位工作。
代码
\documentclass[border=10pt]{standalone}
\usepackage{tikz}
\usepackage{etoolbox}
\makeatletter
\patchcmd\pgfpatharc{\pgfutil@in@}{%
\pgfmathiftrigonometricusesdeg{}{%
% \typeout{\pgf@temp@a, \pgf@temp@b}%
\pgfmathradians@{\pgf@temp@a}\let\pgf@temp@a\pgfmathresult
\pgfmathradians@{\pgf@temp@b}\let\pgf@temp@b\pgfmathresult
% \typeout{\pgf@temp@a, \pgf@temp@b}%
\def\pgfmath@trig@format@choice{0}% \pgfset{trig format=deg}
}\pgfutil@in@}{}{\PatchFailed}
\makeatother
\begin{document}
\begin{tikzpicture}
\draw[trig format=rad, red] (0:1) arc(0:pi:1) % check if timer is correct:
node foreach \p in {0,.125,...,1} [pos=\p, sloped, scale=.3, below] {\p};
\draw[red, dashed, thick] (0:1) arc(0:pi r:1);
\draw[green, dashed] (0:1) arc[start angle=0, end angle=pi r, radius=1];
\end{tikzpicture}
\end{document}