tikz 线不是完美相交

tikz 线不是完美相交

这是我的代码:

\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);

它并不完美,但是更好:

在此处输入图片描述

相关内容