我想绘制 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%
}