为什么用“trig format=rad”给出的角度的弧会产生错误的结果?

为什么用“trig format=rad”给出的角度的弧会产生错误的结果?

考虑以下 MWE:

\documentclass[border=10pt]{standalone}
\usepackage{tikz}

\begin{document}
\begin{tikzpicture}
\draw[trig format=rad,red]  (0:1) arc(0:pi:1);
\draw[blue] (0:1) arc(0:180:1);
\end{tikzpicture}
\end{document}

为什么红弧和蓝弧不一样?

在此处输入图片描述

答案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}

输出

在此处输入图片描述

相关内容