pgfmath/tikz 反余弦定义的好解决方法?

pgfmath/tikz 反余弦定义的好解决方法?

我想绘制 y = arccosine(x) 的图形,并在 Tikz 文档中看到一个函数声称acos可以做到这一点,但返回的结果范围为 [-90,90](度)。我对此感到惊讶,因为 cos(x) 在域 [-90,90] 上不是一对一的,而大多数常规定义会将范围设为acos[0,180]。

定义的函数不是反余弦函数,这一点可以通过以下最小工作示例来验证,其中 pgf 声称 -1 的反余弦为 0:

\documentclass{minimal}
\usepackage{pgfmath}
\begin{document}
Inverse cosine of $-1$ is apparently \pgfmathparse{acos(-1)} \pgfmathresult 
\end{document}

我不确定是否将其算作一个错误(因为文档明确指出它将以这种方式工作)但是是否有一个好的解决方法可以轻松获得 pgfmath/tikz 中的实际反余弦函数?

答案1

这是在修订版 1.3 中修复pgfmathfunctions.trigonometric.code.tex,日期:2009-01-22。

强烈建议升级到包含此文件的 PGF 当前版本 (v 2.1)。

如果您不想更新,只需在前言中包含以下代码块,即可在文档中声明已修复的函数。然后,您可以使用newasin和访问已更正的函数newacos

\makeatletter
\pgfmathdeclarefunction{newasin}{1}{%
    \begingroup%
        \expandafter\pgfmath@x#1pt\relax%
        \pgfmath@xa\pgfmath@x%
        \ifdim\pgfmath@x<0pt\relax%
            \pgfmath@x-\pgfmath@x%
        \fi%
        \pgfmath@x1000\pgfmath@x%
        \afterassignment\pgfmath@gobbletilpgfmath@%
        \expandafter\c@pgfmath@counta\the\pgfmath@x\relax\pgfmath@%
        \pgfmath@x-\csname pgfmath@acos@\the\c@pgfmath@counta\endcsname pt\relax%
        \advance\pgfmath@x90pt\relax%
        \ifdim\pgfmath@xa<0pt\relax%
            \pgfmath@x-\pgfmath@x%
        \fi%
        \pgfmath@returnone\pgfmath@x%
    \endgroup%
}

\pgfmathdeclarefunction{newacos}{1}{%
    \begingroup%
        \expandafter\pgfmath@x#1pt\relax%
        \pgfmath@xa\pgfmath@x%
        \ifdim\pgfmath@x<0pt\relax%
            \pgfmath@x-\pgfmath@x%
        \fi%
        \pgfmath@x1000\pgfmath@x%
        \afterassignment\pgfmath@gobbletilpgfmath@%
        \expandafter\c@pgfmath@counta\the\pgfmath@x\relax\pgfmath@%
        \expandafter\pgfmath@x\csname pgfmath@acos@\the\c@pgfmath@counta\endcsname pt\relax%
        \ifdim\pgfmath@xa<0pt\relax%
            \pgfmath@x-\pgfmath@x%
            \advance\pgfmath@x by180pt\relax%
        \fi%
        \pgfmath@returnone\pgfmath@x%
    \endgroup%
}

相关内容