我想知道是否可以使用交点从圆/椭圆路径中提取子路径。我有两个椭圆,我想只绘制并集的周长。考虑以下代码和相关图形。有没有办法构建一条从 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
我的spath3
TikZ 库可以处理这个问题。不清楚您是想将组件放在一个路径中,还是希望它们保持分开(例如,它们可以有不同的颜色)。在此代码中,我将它们放在一起。
\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
)。