tikz-3dplot 导致操作员出现问题

tikz-3dplot 导致操作员出现问题

我正在尝试使用 3d-plot 库。计划是在开始时定义一些基本的 2d 坐标,然后使用它们定义所有类型的 3d 点,使用“let”运算符:

\documentclass{standalone}
\usepackage{tikz}
\usepackage{tikz-3dplot}
\usetikzlibrary{positioning,calc}
\begin{document}

\tdplotsetmaincoords{0}{0} %doing nothing for now
\begin{tikzpicture}[tdplot_main_coords]
\draw[red,->] (0,0,0)--(1,0,0);
\draw[red,->] (0,0,0)--(0,1,0); %just for reference

\coordinate (A) at (1,1);
\draw let \p1=(A) in (0,0,0)--(\x1,1,0); %this is problematic
\draw[green] (1,1,0)--(28.45,1,0);
\draw[blue] let \p1=(A) in (0,0,0)--(\x1,1);
\end{tikzpicture}
\end{document}

问题是输出没有任何意义:
-tikz 似乎知道如何绘制点 (1,1,0)(绿线的第一个点)。-
tikz 似乎知道 (A) 的 \x1 等于 1(蓝线)。
当 \x1 在 3d 坐标内使用时,-tikz 不知何故将 \x1 乘以 ~28.45,没有明显的原因。
(请注意,尝试将 (A) 定义为 3d - 即 (1,1,0) - 没有任何变化)

我发现这个问题很有趣,所以我很想把它搞清楚,但如果有人能除此之外还有一个解决方案,即如何定义一对数字,然后在 tikz 中使用,并且与 tikz-3dplot 配合良好,我也会感兴趣

输出

答案1

欢迎来到 TeX.SE!let运算符仍然工作正常。您看到的问题是,默认安装的 3d 坐标系tikz-3dplot使用cm单位,而calc语法产生。为了更清楚地看到这一点,让我们看看中pt的定义,\tdplotsetmaincoordstikz-3dplot.sty

\newcommand{\tdplotsetmaincoords}[2]{%
%perform some trig for the display transformation
%
%
%store the user-specified angles for possible future use
\pgfmathsetmacro{\tdplotmaintheta}{#1}
\pgfmathsetmacro{\tdplotmainphi}{#2}
%
%
\tdplotcalctransformmainscreen
%
%now here is where the output is performed
\tikzset{tdplot_main_coords/.style={x={(\raarot cm,\rbarot cm)},y={(\rabrot cm, \rbbrot cm)},z={(\racrot cm, \rbcrot cm)}}}%
}

这里,坐标被乘以(不幸的是,也许可以加起来)cm。(宏\racrot只是旋转矩阵的条目,即在包的约定中参数化的正交 3x3 矩阵。)不过,我应该补充一点,总的来说,我那个包,所以我根本不想批评作者。更何况这个问题很容易解决。

cm可以说最简单的解决方法是通过除以将其转换回1cm/1pt

\documentclass[tikz,border=3.14mm]{standalone}
\usepackage{tikz-3dplot}
\usetikzlibrary{positioning,calc}
\begin{document}

\tdplotsetmaincoords{0}{0} %doing nothing for now
\begin{tikzpicture}[tdplot_main_coords]
\draw[red,->] (0,0,0)--(1,0,0);
\draw[red,->] (0,0,0)--(0,1,0); %just for reference

\coordinate (A) at (1,1);
\draw let \p1=(A) in (0,0,0)--({\x1*1pt/1cm},1,0); %this is problematic
%\draw[green] (1,1,0)--(28.45,1,0);
\draw[blue] let \p1=(A) in (0,0,0)-- (\x1,1);
\end{tikzpicture}
\end{document}

在此处输入图片描述

相关内容