求助关于3dtools的一个问题

发布于 2021-06-04 14:40:40

3DToolsManual.pdf
这篇文档的第8页,自动出虚线的那个例子,请教各位大佬,以下几段代码是什么意思?

\pgfmathsetmacro{\nA}{TDunit("(A_1)-(P_1)x(P_2)-(P_1)")}
\pgfmathsetmacro{\nC}{TDunit("(C_1)-(P_1)x(P_1)-(P_2)")}
\pgfmathtruncatemacro{\itest}{screendepth(\nA)>screendepth(\nC)?1:0}
\tikzset{3d/ordered paths/pA/.style={fill=red}}
\ifnum\itest=1
\tikzset{3d/draw ordered paths={pC,pB,pA}}
\else
\tikzset{3d/draw ordered paths={pA,pB,pC}}
\fi

查看更多

关注者
0
被浏览
1k
2 个回答
越来越少
越来越少 2021-06-05
这家伙很懒,什么也没写!

命令 \pgfmathsetmacro, \pgfmathtruncatemacro, \tikzset 的作用可以参考 PGF 的手册。

命令

\pgfmathsetmacro{\nA}{TDunit("(A_1)-(P_1)x(P_2)-(P_1)")}

的意思是,先用 \pgfmathparse 解析 TDunit("(A_1)-(P_1)x(P_2)-(P_1)"), 然后把解析结果保存到 \nA 中。其中的 TDunit 是在《tikzlibrary3dtools.code.tex》中定义的一个函数,定义是:

\pgfmathdeclarefunction{TDunit}{1}{%normalized vector
\begingroup% 
\pgfmathsetmacro{\pgfutil@tmpv}{TD("#1")}%
\pgfmathsetmacro{\pgfutil@tmpn}{sqrt(TD("(\pgfutil@tmpv)o(\pgfutil@tmpv)"))}%
\ifdim\pgfutil@tmpn pt<0.002pt\relax
\PackageWarning{3dtools}{Vector too short, cannot normalize it.}%
\let\pgfmathresult\pgfutil@tmpv%
\else
\pgfmathsetmacro{\pgfutil@tmpn}{1/\pgfutil@tmpn}%
\pgfmathparse{TD("\pgfutil@tmpn*(\pgfutil@tmpv)")}%
\fi
\pgfmathsmuggle\pgfmathresult\endgroup}%

命令 \tikzset{3d/ordered paths/pA/.style={fill=red}} 定义一个 style, 也就是把 fill=red 保存到键 3d/ordered paths/pA 中。

命令 \tikzset{3d/draw ordered paths={pC,pB,pA}} 执行 3d/draw ordered paths={pC,pB,pA} 这个键,其中 pC,pB,pA 是键 3d/draw ordered paths 处理的参数。这个键在《tikzlibrary3dtools.code.tex》中定义:

\tikzset{...
...
3d/draw ordered paths/.code={%
  \tikzset{3d/temporary list 1/.initial={#1},
      3d/draw ordered path/.list={#1}}%  
  },...
...
}

我没有仔细阅读《tikzlibrary3dtools.code.tex》,不了解其中的函数、键、命令的具体作用。

建议先阅读 PGF 手册的 'Mathematical and Object-Oriented Engines' 的 Mathematical Engine 部分,以及 'Key Management' 部分。

小鬼
小鬼 2021-06-06
这家伙很懒,什么也没写!

请问大佬,(A_1)-(P_1)x(P_2)-(P_1) 这个表达式是计算什么呢?

撰写答案

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

发布
问题

分享
好友

手机
浏览

扫码手机浏览