我希望能够使用中定义的坐标的和分量x
,以便在代码中的其他地方重用这些值。例如,让我们来做类似的事情,y
z
TikZ
\coordinate (p1) at (-2.6,0.7,0);
我想做如下的事情,
\coordinate (p11) at (p1_x,p1_y,12);
我怎样才能做到这一点?
答案1
好吧,虽然对于一般情况来说不可能找到解决方案(原因 Andrew 在评论中已经解释过了),但是对于这种特殊情况来说,通过一种非常非常糟糕的黑客手段,是有可能找到解决方案的。
问题是,只要你设置类似的东西:
\coordinate (p) at (3,4,5);
(3,4,5)
tikz根据键的当前值x
、y
和计算3D点的投影z
,并获取2D点,其坐标存储在中(p)
。因此,存储在中的坐标的最终值(p)
是绝对单位(pt),当然不是3和4。
但在这种特殊情况下,坐标p1
z=0:
\coordinate (p1) at (3,4,0);
因此对于这一点计算出的坐标应该等于给定的,即:3 和 4。但有一个问题,它们以绝对单位存储(在本例中为 pt)。Tikz 将 3(和 4)乘以键x
(和y
)的值,默认情况下为 1cm,结果pt
就是(p1)
。因此,使用let...in
构造我们可以提取这些值,但它们将以点为单位。
因此,最可怕的黑客是将x
和定义y
为等于 1pt,以便图形使用点而不是厘米作为默认单位。这有效:
\documentclass{standalone}
\usepackage{tikz}
\begin{document}
\usetikzlibrary{calc}
\begin{tikzpicture}[x=1pt, y=1pt, z=-0.5pt] % Agh
% Let's draw some 3D axes
\coordinate (x) at (100,0,0);
\coordinate (y) at (0,100,0);
\coordinate (z) at (0,0,100);
\foreach \axis in {x,y,z}
\draw[-latex] (0,0,0) -- (\axis);
% Our point
\coordinate (p1) at (80, 30, 0);
% Compute the point at the same x,y, elevated 25pt in z
\path let \p1 = (p1)
in coordinate (p11) at (\x1, \y1, 25);
% Draw those points
\fill[red] (p1) circle (1pt);
\fill[blue] (p11) circle (1pt);
% Some bells and whistles
\draw[dotted] (p1) -- (p1|-x);
\draw[dotted] (p1) -- (p1-|y);
\draw[dashed,-latex] (p1) -- (p11);
\end{tikzpicture}
结果是: