在 tikz 中设置并集操作

在 tikz 中设置并集操作

有没有办法在 tikz 中获取两个封闭路径的“集合并集”?

为了说明我的意思,请考虑以下 MWE

\documentclass{article}
\usepackage{tikz}
\begin{document}

\begin{tikzpicture}
    \path[fill=cyan] (0,1)--(3,1)--(3,2)--(0,2)--cycle;
    \path[fill=orange] (1,0)--(1,3)--(2,3)--(2,0)--cycle;
\end{tikzpicture}

\end{document}

在此处输入图片描述

我想从这两条路径中得到一条包含红色路径和蓝色路径并集的路径。在本例中,这对应于下面的黑线:

\documentclass{article}
\usepackage{tikz}
\begin{document}

\begin{tikzpicture}
    \path[fill=cyan] (0,1)--(3,1)--(3,2)--(0,2)--cycle;
    \path[fill=orange] (1,0)--(1,3)--(2,3)--(2,0)--cycle;
    \path[draw,line width=1.5pt] (0,1)--(1,1)--(1,0)--(2,0)--(2,1)--(3,1)--(3,2)--(2,2)--(2,3)--(1,3)--(1,2)--(0,2)--cycle;
\end{tikzpicture}

\end{document}

在此处输入图片描述

但对于任何一对路径,我当然想自动获取它。

答案1

它不是完全自动的(你必须选择“部分”),但你可以使用spath3intersectionsTi来实现Z 库。

例如:

\documentclass[tikz,border=1.618mm]{standalone}
\usetikzlibrary{intersections,spath3}

\begin{document}
\begin{tikzpicture}
    \path[fill=cyan  ,spath/save=A] (0,1)--(3,1)--(3,2)--(0,2)--cycle;
    \path[fill=orange,spath/save=B] (1,0)--(1,3)--(2,3)--(2,0)--cycle;
% spath3 operatios
\tikzset
{
  spath/split at intersections={A}{B},
  spath/get components of={A}\Acpts,
  spath/get components of={B}\Bcpts
}
% the set union:
\draw[thick,
      spath/use=\getComponentOf\Acpts{2},
      spath/use={\getComponentOf\Bcpts{2},reverse,weld},
      spath/use={\getComponentOf\Acpts{4},weld},
      spath/use={\getComponentOf\Bcpts{4},reverse,weld},
     ] -- cycle ;
\end{tikzpicture}
\end{document}

在此处输入图片描述

相关内容