使用这三个点透视坐标系统,必须使用语法
(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}