
Мне нужна помощь в том, как TikZnonzero 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}