使用`asin`计算弧的终止角度时,基本TikZ出现“缺失数字”错误

使用`asin`计算弧的终止角度时,基本TikZ出现“缺失数字”错误

我是 TikZ 绘图方面的新手,在以下示例中标有 的行上遇到了“缺失数字错误” %(**)

\documentclass{book}
\usepackage{tikz}
\usetikzlibrary{calc,shapes.geometric,arrows,intersections} 
%shapes.geometric and arrows are used in other TikZ graphics not included in this MCVE
\begin{document}
\begin{tikzpicture}[scale=0.3]
\draw [name path=yaxis, ->,thick] (0,-2)--(0,12) node (yax) [above] {$\Im E$};
\draw [->,thick] (-20,0)--(12,0) node (xax) [right] {$\Re E$};
\path [name path=circular] (-15,0) arc (180:0:8);
\path [name intersections={of=circular and yaxis}];
\coordinate (c) at (intersection-1);
\draw [->,thick] let
    \p1=(c),
    \n1={\y1/8},              %(*)
    \n2={asin(\n1)}           %(**)
in (-15,0) arc (180:\n2:8);   %(***)
\draw let \p1=(c) in (0,\y1)--(7,\y1);
\end{tikzpicture}
\end{document}

我已经检查了此网站上现有的问题,但尚未找到答案,我尝试以各种方式在和周围添加括号%(*)%(**)但没有成功。我还尝试将两个lets 合并为一个,如\n1={asin(\y1/8)},并尝试添加括号的变体。它们都报告缺少数字错误。如果我用数字替换\n1in line ,或使用in 代替in (这不是我想要的,但我只是想检查一下),也不会出现错误。%(**)\n1\n2%(***)

其他观察

  • 如果我替换acosln,则不会报告错误
  • 如果我替换\y1/8\y1,则会报告错误“尺寸太大”

编辑

asin(\y1/8)=acos(7/8),所以无论如何我都可以绘制我想要的,但我只是不明白错误来自哪里。

答案1

我个人会用不同的方式计算角度(假设你不想用分析方法计算)。你有一个(-7,0)半径为 的半圆8cm,你想从中画出到 y 轴交点的路径。也就是说,我们需要 的极坐标(c)-(-7,0)。可以通过以下方式计算角度atan2,这样就避免了必须除以维度,以及在询问 Ti 时可能出现的相关错误Z 计算大于 1 的数的反正弦。atan2对于任何参数都有定义,因此不会出现此错误(并且这种计算角度的方式可以说更直观)。水平拉伸不需要calc(但在这里使用当然没有错calc)。

\documentclass{book}
\usepackage{tikz}
\usetikzlibrary{calc,intersections} 
\begin{document}
\begin{tikzpicture}[scale=0.3]
\draw [name path=yaxis, ->,thick] (0,-2)--(0,12) node (yax) [above] {$\Im E$};
\draw [->,thick] (-20,0)--(12,0) node (xax) [right] {$\Re E$};
\path [name path=circular] (-15,0) arc (180:0:8);
\path [name intersections={of=circular and yaxis}];
\coordinate (c) at (intersection-1);
\draw [->,thick] let  \p1=($(c)-(-7,0)$),
    \n1={atan2(\y1,\x1)} in (-15,0) arc (180:\n1:8);  
\draw (c-|0,0) --  (c-|7,0);
\end{tikzpicture}
\end{document}

在此处输入图片描述

答案2

我在一个封闭式问题中找到了答案。对我来说,这个问题问得很清楚,我不知道为什么它被封闭了。

继第二条评论之后Tikz:在 pt 和单位测量之间进行转换,我将\n1={\y1/8}其改为\n1={\y1/8cm},它按预期工作。这是因为内部坐标系使用cm作为单位长度,但pt在使用坐标分配时报告带有单位的坐标。

尽管如此,我不明白为什么错误是“缺少数字,视为零”,但至少我知道将来正确的做法是什么。

相关内容