如何使用 Tikz 渲染斜投影图形?

如何使用 Tikz 渲染斜投影图形?

我想用斜投影渲染下图以保留三角形底座的初始形状。

在此处输入图片描述 在此处输入图片描述

\documentclass[border=10pt, multi, tikz]{standalone}
\tikzset{pics/prismoid/.style={code={
    \tikzset{prismoid/.cd,#1}
    \def\pv##1{\pgfkeysvalueof{/tikz/prismoid/##1}}
    \draw [solid, opacity=.5, pic actions]
    %%  point o - avant droit
    (0,0,0) coordinate (o)
    %% point a - avant gauche
    (-\pv{scale}*\pv{width},0,0) coordinate (a)
    %% point b - arrière central
    (-\pv{scale}*\pv{width}/2,\pv{scale}*\pv{depth},0) coordinate (b)
    %% point c - haut avant droit
    (0,0,\pv{scale}*\pv{height}) coordinate (c)
    %% point d - haut avant gauche
    (-\pv{scale}*\pv{width},0,\pv{scale}*\pv{height}) coordinate (d)
    %% point e - haut arrière central
    (-\pv{scale}*\pv{width}/2,\pv{scale}*\pv{depth},\pv{scale}*\pv{height}) coordinate (e)
    %% jonction entre les points
     %(b) edge[densely dashed] (a)
     %edge[densely dashed] (c) edge[densely dashed] (d)
     (o) -- (a) -- (d) -- (c)  -- (o)
     (c) -- (e) -- (d)
     (b) edge[densely dashed] (o) edge[densely dashed] (a) edge[densely dashed] (e)
     ;
  }},
  prismoid/.cd,
  width/.initial=10,
  height/.initial=10,
  depth/.initial=10,
  scale/.initial=.2,
}
\begin{document}
\begin{tikzpicture}[x={(2cm,0cm)},y={(45:1cm)},z={(0cm,2cm)},line cap=round,line join=round]
  \pic {prismoid={width=10, height=10, depth=10}};
  %\pic {prismoid={width=20, height=10, depth=10}};
  %\pic {prismoid={width=10, height=20, depth=10}};
  %\pic {prismoid={width=10, height=10, depth=20}};
\end{tikzpicture}
\end{document}

代码来自@Schrödinger's cat,他帮我解决了我之前的帖子。我已经尝试更改 的值\begin{tikzpicture}[x={(2cm,0cm)},y={(45:1cm)},z={(0cm,2cm)},或者通过其他可选参数(3d 视图、透视)更改它,但不起作用。我目前正在互联网上搜索,但如果有人有任何想法,我愿意接受任何建议。

答案1

骑士透视(法语)保留了平行性。要制作这样的透视图,只需以消失角完全相同地复制正面即可获得背面。这可以使用 TikZ 完成,就像以传统方式使用尺子、圆规和直角尺制作此构造一样。

这里,我使用了calc允许添加坐标的库(因此坐标被视为向量)。通过将相同的向量添加到正面的每个顶点,我们获得了背面的顶点。

截屏

\documentclass[tikz,border=5mm]{standalone}

\usetikzlibrary{calc}

\begin{document}

\begin{tikzpicture}
% front face
\coordinate (A) at (-1,0);
\coordinate (B) at (0,2);
\coordinate (C) at (1,0);
% vector v defines the leakage angle
\coordinate (v) at (.8,.8);
\draw (A)--(B)--(C)--cycle;
% back face
\coordinate (A') at ($(A)+(v)$);
\coordinate (B') at ($(B)+(v)$);
\coordinate (C') at ($(C)+(v)$);
\draw[dashed] (C')--(A')--(B');
\draw (B')--(C');
\draw[dashed](A)--(A');
\draw(B)--(B');
\draw(C)--(C');
\end{tikzpicture}

\end{document}

相关内容