基于@gernot的以下想法如何定义新的 2D 画布,我想对其进行调整,以便我可以将 3 个现有坐标传递给它。
\documentclass{standalone}
\usepackage{tikz}
\usetikzlibrary{calc}
\usepackage{tikz-3dplot}
% define canvas as origin, x direction, ydirection by specifying each coordinate
\makeatletter
\tikzoption{canvas}[]{\@setOxy#1}
\def\@setOxy (#1,#2,#3),(#4,#5,#6),(#7,#8,#9)%
{\def\tikz@plane@origin{\pgfpointxyz{#1}{#2}{#3}}%
\def\tikz@plane@x{\pgfpointxyz{#4}{#5}{#6}}%
\def\tikz@plane@y{\pgfpointxyz{#7}{#8}{#9}}%
\tikz@canvas@is@plane}
\makeatother
% my adaption attempt
\makeatletter
\tikzoption{canvasP}[]{\@setPOxy#1}
\def\@setPOxy #1,#2,#3%
{\def\tikz@plane@origin{#1}%
\def\tikz@plane@x{#2}%
\def\tikz@plane@y{#3}%
\tikz@canvas@is@plane}
\makeatother
% Define multiple 3d points following tkz-euclide notation
\newcommand{\tkzDefdPoints}[2][]{
\foreach \ptx/\pty/\ptz/\name in {#2}{
\path [#1] (\ptx,\pty,\ptz) coordinate (\name);
}
}
\tdplotsetmaincoords{70}{110}
\begin{document}
\begin{tikzpicture}[tdplot_main_coords]
\draw[->] (0,0,0) -- (5,0,0) node[right]{$x$};
\draw[->] (0,0,0) -- (0,5,0) node[above]{$y$};
\draw[->] (0,0,0) -- (0,0,5) node[below left]{$z$};
\tkzDefdPoints{2/2/2/A,2/3/2/B,2/2/3/C}
\draw (A) -- (B) -- (C) -- cycle;
\begin{scope}[canvas={(2,2,2),(2,3,2),(2,2,3)}]
\draw[red] (1,0) -- (1,1) -- (0,1);
\end{scope}
\begin{scope}[canvasP={A,B,C}]
\draw[blue,dashed] (1,0) -- (1,1) -- (0,1);
\end{scope}
\end{tikzpicture}
\end{document}
虽然没有收到任何错误消息,但它仍然没有执行任何操作。是否有 \pgf... 命令可用于现有坐标,而不是指定给出 x、y 和 z 坐标的点?
我尝试了一种解决方法,即采用 @andrew swann 的另一个想法来提取(或者说保存)某个点的 3d 坐标,但遇到了更多麻烦。链接到单独的问题: tikzkeys 在 foreach 语句中不起作用