![关于 TikZ 非零规则的一个问题](https://linux22.com/image/472921/%E5%85%B3%E4%BA%8E%20TikZ%20%E9%9D%9E%E9%9B%B6%E8%A7%84%E5%88%99%E7%9A%84%E4%B8%80%E4%B8%AA%E9%97%AE%E9%A2%98.png)
我需要帮助了解 TikZ 的nonzero rule
有效。它表示计算从某些点开始的射线的交叉次数。官方示例fill
为一个三角形和一个圆圈失去了我,因为三角形和圆圈之间的交点没有填充。
为了理解这一点,我改编了该示例并添加了两个圆圈的第二个示例。
\begin{document}
\begin{tikzpicture}
\filldraw[fill=yellow]
% Clockwise isoceles right-angled triangle
(0,0) -- (1,1) -- (2,0) --cycle
% Small circle centered on the leftmost vertex
(0,0) circle (.5);
\draw[->] (0,0) -- (.3,.3);
\draw[->] (1,1) -- (1.5,.5);
\draw[->] (2,0) -- (1,0);
\draw[->] (120:.5) arc (120:90:.5);
\draw[->] (300:.5) arc (300:270:.5);
\draw[->] (.2,.1) -- +(0,1) node[above] {crossings: $1+1 = 2$};
\begin{scope}[yshift=-3cm]
\filldraw[fill=yellow]
% Two circles
(0,0) circle (.5)
(.5,0) circle (.5);
\draw[->] (120:.5) arc (120:90:.5);
\draw[->] (300:.5) arc (300:270:.5);
\draw[->] (120:.5)+(.5,0) arc (120:90:.5);
\draw[->] (300:.5)+(.5,0) arc (300:270:.5);
\draw[->] (.2,.1) -- +(0,1) node[above] {crossings: $1+1 = 2$};
\end{scope}
\end{tikzpicture}
\end{document}
我很难理解以下内容:
- 在第一个例子中,交叉部分未被填充。
- 在第二个示例中,交叉部分被填充。
因为过境次数相同。你能解释一下为什么会发生这种情况吗?
答案1
通过使用以下方法反转圆圈的绘制方向,从而修正了圆圈的绘制方向[x radius=-\r, y radius=\r]
\documentclass[tikz, border=1cm]{standalone}
\begin{document}
\begin{tikzpicture}
\filldraw[fill=yellow]
(0,0) -- (1,1) -- (2,0) --cycle
(0,0) circle[x radius=-0.5, y radius=0.5];
\draw[->] (0,0) -- (.3,.3);
\draw[->] (1,1) -- (1.5,.5);
\draw[->] (2,0) -- (1,0);
\draw[->] (120:.5) arc (120:90:.5);
\draw[->] (300:.5) arc (300:270:.5);
\draw[->] (.2,.1) -- +(0,1) node[above] {crossings: $1+1 = 2$};
\begin{scope}[yshift=-3cm]
\filldraw[fill=yellow]
(0,0) circle[x radius=-0.5, y radius=0.5]
(.5,0) circle[x radius=-0.5, y radius=0.5];
\draw[->] (120:.5) arc (120:90:.5);
\draw[->] (300:.5) arc (300:270:.5);
\draw[->] (120:.5)+(.5,0) arc (120:90:.5);
\draw[->] (300:.5)+(.5,0) arc (300:270:.5);
\draw[->] (.2,.1) -- +(0,1) node[above] {crossings: $1+1 = 2$};
\end{scope}
\end{tikzpicture}
\end{document}