这个问题是受到我自己的回答启发的:
如何在 tikz 图片中绘制交叉口?
我分四个阶段绘制蓝色椭圆。我认为应该只用一个\fill
命令就可以绘制。为了做出正确的\clip
,我需要了解默认\clip
或\fill
非零缠绕规则,nonzero rule
(手册 15.5.2 第 181 页)而不是even odd rule
。
在此示例中,我们可以看到,与矩形相比,圆形(和椭圆形)的笔触是反向的:
\documentclass[tikz]{standalone}
\begin{document}
\begin{tikzpicture}
\draw[fill=red] (0,0) circle (1) (0,0) rectangle (2,2);
\draw[fill=green] (4,-1) rectangle (6,1) (5,0) rectangle (7,2);
\draw[fill=blue] (9,0) circle (1) (9.5,0.5) circle (1);
\end{tikzpicture}
\end{document}
为了制作正确的剪辑,我需要从四个重叠的椭圆和一个矩形中选择一个区域。我相信如果不改变某些椭圆的描边方向,这是不可能的!?使用 制作剪辑不会有帮助even odd rule
。
问题:
没有的话如何填充两个重叠圆(椭圆)的交点even odd rule
?
梅威瑟:
\documentclass[tikz]{standalone}
\begin{document}
\begin{tikzpicture}
\fill (0,0) circle (2) (1,1) circle (2);
\end{tikzpicture}
\end{document}
我在手册中找不到有关更改笔划方向的任何信息。可以做到吗?也许还有其他方法?
编辑:
我只是发现,对于我最初的目的来说,做帮助使用剪辑even odd rule
(可以通过范围完成)。 - 但我的问题仍然是一样的 - 没有它是否可能。
答案1
的笔画方向rectangle
相对于提供的点。例如,在您的第一个代码中,尝试使用(5,2) rectangle (7,0)
而不是(5,0) rectangle (7,2)
。使用circle
,您可以使用circle(-2 and 2)
而不是circle(2)
。
\documentclass[tikz]{standalone}
\begin{document}
\begin{tikzpicture}
\draw[fill=red] (0,0) circle (1) (0,0) rectangle (2,2);
\draw[fill=green] (4,-1) rectangle (6,1) (5,2) rectangle (7,0);
\draw[fill=blue] (9,0) circle (1) (9.5,0.5) circle (-1 and 1);
\end{tikzpicture}
\end{document}
答案2
我的spath3
该库旨在对路径进行低级操作,包括反转笔划方向。公共接口有点基础,因为其目的是提供可在其他包(例如knot
和calligraphy
TikZ 库)中使用的功能。以下是概念证明。
\documentclass{article}
%\url{https://tex.stackexchange.com/q/568999/86}
\usepackage{tikz}
\usepackage{spath3}
\begin{document}
\begin{tikzpicture}
\path[save spath=circle1] (0,0) circle[radius=2];
\path[save spath=circle2] (1,1) circle[radius=2];
\fill (0,0) [insert spath=circle1] (1,1) [insert reverse spath=circle2];
\end{tikzpicture}
\end{document}
由OP编辑:
我相信spath3
语法已经更新。现在的工作代码是:
\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{spath3}
\begin{document}
\begin{tikzpicture}
\path[spath/save=circle1] (0,0) circle[radius=2];
\path[spath/save=circle2] (1,1) circle[radius=2];
\fill (0,0) [spath/insert=circle1] (1,1) [spath/insert reverse=circle2];
\end{tikzpicture}
\end{document}