有没有办法自动使用三点透视坐标系?

有没有办法自动使用三点透视坐标系?

使用这三个点透视坐标系统,必须使用语法

(tpp cs:x=1,y=2,z=3)

指定点 (1,2,3)。我觉得写起来有点麻烦。有没有办法自动将表格的坐标(1,2,3)视为三点透视坐标系中的坐标?

我知道我可以尝试定义一个新的命令,将其翻译\tpp{1,2,3}(tpp cs:x=1,y=2,z=3)

答案1

我们可以3d coordinate is通过选择引入一个密钥

  • default(→\pgfpointxyz) 和
  • perspective(→ \pgfpointperspectivexyz)。

您只需要在正确的时间做出正确的选择。

红色节点不应该使用透视坐标系,但您可以使用3d coordinate is = default它或显式的(xyz cs: x=4, y=0, z=0)

代码

\documentclass[tikz]{standalone}
\usetikzlibrary{perspective}
\makeatletter
\tikzset{
  3d coordinate is/.is choice,
  3d coordinate is/default/.code={\def\tikz@parse@splitxyz##1##2##3,##4,{%
    \def\pgfutil@next{##1{\pgfpointxyz{##2}{##3}{##4}}}}},
  3d coordinate is/perspective/.code={\def\tikz@parse@splitxyz##1##2##3,##4,{%
    \def\pgfutil@next{##1{\pgfpointperspectivexyz{##2}{##3}{##4}}}}}}
\makeatother
\begin{document}
\begin{tikzpicture}[isometric view, perspective={p = {(4,0,0)}, q = {(0,4,0)}}]
\node[fill=red,circle,inner sep=1.5pt,label=above:p] at (4,0,0){};
\foreach \i in {0,...,100}
  \filldraw[fill = gray]               (tpp cs: x=\i,     y=0, z=0)
    -- (tpp cs: x=\i+0.5, y=0, z=0) -- (tpp cs: x=\i+0.5, y=2, z=0)
    -- (tpp cs: x=\i,     y=2, z=0) -- cycle;
\end{tikzpicture}
\begin{tikzpicture}[
  isometric view,
  perspective={p = {(4,0,0)}, q = {(0,4,0)}},
  3d coordinate is = perspective]
\node[fill=red,circle,inner sep=1.5pt,label=above:p] at (xyz cs: x=4, y=0, z=0){};
\foreach \i in {0,...,100}
  \filldraw[fill = gray] (\i,     0, 0)
    -- (\i+0.5, 0, 0) -- (\i+0.5, 2, 0)
    -- (\i,     2, 0) -- cycle;
\end{tikzpicture}
\end{document}

在此处输入图片描述

相关内容