看了tikz-3dplot手册,其中\tdplotdefinepoints
后面只能接受\tdplotdefinepoints(2,2,2)(3,5,1)(-1,5,3)
,如何让它能接受为\tdplotdefinepoints(A)(O1)(C)
这样的参数呢?
以下为MWE
tikz-3dplot问题.zip
你需要重新定义 \tdplotdefinepoints
.
你可能需要了解 \tikz@scan@one@point
, 以及 TikZ 的代表 xyz 坐标系的矩阵, 代表 canvas 坐标系的矩阵.
简单说, TikZ 会把 (1,2,3)
这样的坐标通过矩阵乘法, 转换为 canvas 坐标系中的二维坐标数据. 像 (A)
这样的坐标位置实际上也是二维的. 你想要的就是这个过程的逆过程, 也就是把二维的数据再变成对应的三维坐标数据, 这需要计算 canvas 坐标系矩阵的逆矩阵(参考 \pgftransforminvert
). 另外 TikZ 的 xyz 坐标系的矩阵实际是利用 3 个二维向量模拟三维标架(可以认为是2行3列的矩阵), 所以这个逆过程似乎比较困难.
可以用其他办法, 例如, 直接把 (A)
与 (1,2,3)
联系起来,
\makeatletter
\def\savemycoord(#1)(#2){
\expandafter\def\csname my@coord@(1)\endcsname{(#2)}
}
\def\readmycoord(#1){
\edef\tempsave{\csname my@coord@(#1)\endcsname}
}
这样定义后,
\savemycoord(A)(1,2,3)
\readmycoord(A)
就会把 (1,2,3)
保存到 \tempsave
.
谢谢大佬,我用
tikz-3dplot-circleofsphere
实现了我想要的效果了