这是我的代码:
\documentclass{standalone}
\usepackage{tikz}
\usetikzlibrary{calc}
\begin{document}
\begin{tikzpicture}
\fill[gray!50] (0,2.5) -- (2,2.5) -- ++(60:.2) -- ++(-2,0) -- cycle;
\fill[gray!50] (0,2.5) -- (2,2.5) -- ++(0,-.2) -- ++(-2,0) -- cycle;
\fill[gray!50] (2,2.5) -- ++(60:.2) -- ++(0,-.2) -- ++(60:-.2) -- cycle;
\begin{scope}[shift={(60:1.3)}]
\fill[gray!50] (0,2.5) -- (2,2.5) -- ++(60:.2) -- ++(-2,0) -- cycle;
\fill[gray!50] (0,2.5) -- (2,2.5) -- ++(0,-.2) -- ++(-2,0) -- cycle;
\fill[gray!50] (2,2.5) -- ++(60:.2) -- ++(0,-.2) -- ++(60:-.2) -- cycle;
\end{scope}
%see here first will be helpful to understand
\draw (0,0) -- (2,0) -- (2,2.5) -- (0,2.5) -- cycle;
\draw (2,0) -- ++(60:1.5) -- ++(0,2.5) coordinate (a) -- ++(60:-.2) -- ++(0,-.2) -- ++(60:-1.1) -- ++(0,.2) -- ++(60:-.2);
\draw (a) -- ++(-2,0) -- ++(60:-.2) coordinate (b) -- ++(2,0);
\draw (b) -- ++(0,-.2) coordinate (c) -- ++(60:-.87);
\draw[densely dotted] (c) -- ++(2,0);
\draw (0,2.5) -- ++(60:.2) -- ++(2,0) -- ++(60:-.2) -- cycle;
\end{tikzpicture}
\end{document}
答案1
回答为什么它们画得不完美,它们是完美的。问题是,为了获得 3D 效果,你会得到相当尖锐的角。实际上,你在图中的许多地方都遇到了同样的问题,不同角度的角相互重叠,但在标记的角上最明显。如果你给线条上色并改变顺序,你就会看到问题:
所以,这就是问题的原因,现在该如何解决它。正如评论中所述,最简单的方法是不要有尖角。作为 tikzpicture 的参数,您可以说[line join=round]
。这将直接使所有角更加对齐:
如果你真的想要尖角,你可以删除红线的最后一部分(与绿线重叠)。这样就可以去除尖角,
\draw[green] (0,2.5) -- ++(60:.2) -- ++(2,0) -- ++(60:-.2) -- cycle;
%\draw[red] (2,0) -- ++(60:1.5) -- ++(0,2.5) coordinate (a) -- ++(60:-.2) -- ++(0,-.2) -- ++(60:-1.1) -- ++(0,.2) -- ++(60:-.2);
\draw[red] (2,0) -- ++(60:1.5) -- ++(0,2.5) coordinate (a) -- ++(60:-.2) -- ++(0,-.2) -- ++(60:-1.1) -- ++(0,.2);
它并不完美,但是更好: