5 请问tikz-3dplot中如何让\tdplotdefinepoints接受如下要求

发布于 2024-01-02 09:48:37

看了tikz-3dplot手册,其中\tdplotdefinepoints后面只能接受\tdplotdefinepoints(2,2,2)(3,5,1)(-1,5,3),如何让它能接受为
\tdplotdefinepoints(A)(O1)(C)这样的参数呢?
以下为MWE
tikz-3dplot问题.zip

查看更多

关注者
0
被浏览
643
越来越少
越来越少 2024-01-04
这家伙很懒,什么也没写!

你需要重新定义 \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.

1 个回答

撰写答案

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

发布
问题

分享
好友

手机
浏览

扫码手机浏览