使用预先存在的点定义 2D 画布

使用预先存在的点定义 2D 画布

基于@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 语句中不起作用

相关内容