\pgfmathresult值为什么不正确?

发布于 2024-11-28 21:53:23

coordinate ["$P1$"] (P1) at ($(O1)!\length cm!48.59:(O2)$);
%coordinate ["$P1$"] (P1) at ($(O1)!\length cm!\pgfmathresult:(O2)$);%%%这里的pgfmathresult值为什么不正确?

\documentclass{ctexart}
\usepackage{ amssymb,amsmath, amsthm, amsfonts,thmtools,appendix, bm,framed,graphicx, mathrsfs}
\usepackage{tkz-euclide}
\usetikzlibrary{patterns,arrows,positioning,arrows.meta,calc,fadings,shapes,decorations.markings}

\begin{document}
\begin{tikzpicture}[scale=.6]
\draw[help lines] (0,0) grid (12,12);
\coordinate ["$O_1$"] (O1) at (1,3);
\coordinate ["$O_2$"] (O2) at (5,3);
\draw(O1) circle (1 cm);\draw(O2) circle (2 cm);
\pgfmathsetmacro{\length}{sqrt(7)}
\pgfmathasin{3/4}%\pgfmathresult    %48.59
\coordinate ["$P1$"] (P1) at ($(O1)!\length cm!48.59:(O2)$);
%\coordinate ["$P1$"] (P1) at ($(O1)!\length cm!\pgfmathresult:(O2)$);%%%这里的\pgfmathresult值为什么不正确?
\draw(O1) circle (\length cm);
\coordinate ["$P$"] (P) at ($(P1)!1cm!0:(O2)$);
%\coordinate ["$A$"] (A) at ($(O2)!(P)!(P1)$);
\coordinate ["$B$"] (B) at ($(P)!\length cm!90:(P1)$);
\draw[red] (O2) -- (O1)  (P) -- (B) (O1) -- (P1)--(O2);
\end{tikzpicture}

\pgfmathsetmacro{\length}{sqrt(7)}\pgfmathresult

\pgfmathasin{3/4}\pgfmathresult %48.59

\pgfmathatantwo{3}{sqrt(7)}\pgfmathresult
\end{document}

查看更多

关注者
0
被浏览
212
3 个回答
雾月
雾月 2024-11-28
这家伙很懒,什么也没写!

坐标的表达式提前不会展开宏,而是一步步解析,并且在解析表达式时会使用 \pgfmathparse,这会修改 \pgfmathresult 的值,所以 \pgfmathresult 的值是不确定的。

而数学表达式 \pgfmath 等,会首先展开它的参数,这时 \pgfmathresult 已经被展开了,它的值已经固定。

仗剑天涯
仗剑天涯 2024-11-29
这家伙很懒,什么也没写!

`%pgfmathasin{3/4}%pgfmathresult
pgfmathsetmacro{newangle}{asin(3/4)}`
把上一句修改为下一句即可了。

越来越少
越来越少 2024-11-30
这家伙很懒,什么也没写!
\coordinate ["$P1$"] (P1) at ($(O1)!\length cm!\pgfmathresult:(O2)$);

\coordinate ["$P1$"] (P1) at ($(O1)!\length cm!\length cm:(O2)$);

是一样的.

\pgfmathparse 解析 \length cm, 得到 \pgfmathresult, 然后再解析 \pgfmathresult:(O2)这一部分.

多数 pgf 的数学函数都会把结果保存到 \pgfmathresult, 命令 \pgfmathparse 总会把结果保存到 \pgfmathresult.

如果需要某个 \pgfmathresult, 最好及时转存它的值.

具体原因见 tikz 的 calc 库.

撰写答案

请登录后再发布答案,点击登录

发布
问题

分享
好友

手机
浏览

扫码手机浏览