从交点提取子路径

从交点提取子路径

我想知道是否可以使用交点从圆/椭圆路径中提取子路径。我有两个椭圆,我想只绘制并集的周长。考虑以下代码和相关图形。有没有办法构建一条从 1 到 2 的路径,沿着绿色圆弧,然后从 2 到 3 的路径,沿着红色圆弧,等等?

省略号

\pagestyle{empty}
\usepackage{tikz}
\usetikzlibrary{intersections}

\begin{document}
\begin{tikzpicture}
 \draw[name path=e1,green] (0,0) ellipse [x radius=1, y radius=2,
 rotate=30];
 \draw[name path=e2,red] (0,0) ellipse [x radius=.8, y radius=3, rotate=-30];
 \fill [name intersections={of=e1 and e2, name=i, total=\t}]
 [every node/.style={left}]
 \foreach \s in {1,...,\t}{(i-\s) circle (2pt) node {\footnotesize\s}};
\end{tikzpicture}
\end{document}```

答案1

我的spath3TikZ 库可以处理这个问题。不清楚您是想将组件放在一个路径中,还是希望它们保持分开(例如,它们可以有不同的颜色)。在此代码中,我将它们放在一起。

\documentclass{article}
%\url{https://tex.stackexchange.com/q/585049/86}

\pagestyle{empty}
\usepackage{tikz}
\usetikzlibrary{intersections,spath3}

\begin{document}
\begin{tikzpicture}
 \draw[spath/save=e1,green, line width=4pt] (0,0) ellipse [x radius=1, y radius=2,
 rotate=30];
 \draw[spath/save=e2, red, line width=4pt] (0,0) ellipse [x radius=.8, y radius=3, rotate=-30];
 \draw [name intersections={of=e1 and e2, name=i, total=\t}]
 [every node/.style={left}]
 \foreach \s in {1,...,\t}{(i-\s) circle[radius=6pt] +(-6pt,0) node {\footnotesize\s}};
 \tikzset{
   spath/split at intersections={e1}{e2},
   spath/get components of={e1}\Acpts,
   spath/get components of={e2}\Bcpts,
 }
 \draw[
   ultra thick,
   spath/use=\getComponentOf\Acpts{2},
   spath/use={\getComponentOf\Bcpts{4},weld},
   spath/use={\getComponentOf\Acpts{4},weld},
   spath/use={\getComponentOf\Bcpts{2},weld},
   ] -- cycle;
 ;
\end{tikzpicture}
\end{document}`

其结果是:

拼接和切块椭圆

weld我已将您的交叉点装饰更改为空心圆圈,以便您可以看到参数在无缝连接路径方面的效果。

位置 1 处有轻微的瑕疵。这是路径的起点和终点,起点和终点之间存在细微差异,因此 PDF 查看器会将一条细小的线段放在那里,从而导致出现问题。我想到了一个修复方法,我会将其添加到下一个版本中(开发版本可在github)。

相关内容