Materiały z ćwiczeń – 5–6 maja 2015 r 1. Funkcja foreach

Transkrypt

Materiały z ćwiczeń – 5–6 maja 2015 r 1. Funkcja foreach
Materiały z ćwiczeń – 5–6 maja 2015 r
Zofia Walczak
1.
Funkcja foreach
\begin{tikzpicture}
\draw (0,0) -- (6,0);
\fill (0,0) circle (2pt);
\foreach \x in {1,2,3,4,5}
\draw (\x,0) circle(2pt);
%\fill circle (2pt);
\end{tikzpicture}
\begin{tikzpicture}
\draw[->] (0,0) -- (0,8);
\draw[->] (0,0) -- (8,0);
\fill (0,0) circle(2pt);
\foreach \x in {1,2,3,4,5,6,7} \draw (\x,0) +(0,.1)-- ++(0,-.1);
\foreach \y in {1,2,3,4,5,6,7} \draw (0,\y) +(-.1,0)-- ++(.1,0);
\foreach \x in {1,2,3,4,5,6,7}
\foreach \y in {1,2,3,4,5,6,7}
\draw[fill] (\x,\y) circle(2pt);
\foreach \x in {.5,1.5,2.5,3.5,4.5,5.5,6.5}
\foreach \y in {.5,1.5,2.5,3.5,4.5,5.5,6.5}
\draw (\x,\y) circle(1pt);
\draw[line width=2pt] (3,2)-- (5,6);
\end{tikzpicture}
1
2.
Wypełnianie ścieżki kolorem
Do wypełniania ścieżki kolorem służy polecenie \fill=<kolor>. Jeśli użyjemy
tego polecenia to najpierw ścieżka zostanie domknięta (jeśli będzie to konieczne)
a następnie jej wnętrze będzie wypełnione kolorem. Jeżeli wypełniany obszar
składa się z kilku innych obszarów zamkniętych, wtedy należy skorzystać z jednej
z dwóch istniejących zasad wypełniania: nonzero rule i even odd rule.
\filldraw(0,0)--(4,-1)--(2,3)--(0,0)
(4,4)--(3,-2)--(1,-2)--(4,4);
\filldraw(0,0)--(4,-1)--(2,3)--(0,0)
(4,4)--(1,-2)--(3,-2)--(4,4);
\filldraw[even odd rule] (0,0)--(4,-1)--(2,3)--(0,0)
(4,4)--(1,-2)--(3,-2)--(4,4);
\filldraw[even odd rule] (0,0)--(4,-1)--(2,3)--(0,0)
(4,4)--(3,-2)--(1,-2)--(4,4);
2
\fill(0,0)--(4,0)--(2,3)--cycle
(0,2)--(4,2)--(2,-1)--cycle;
\filldraw[even odd rule](0,0)--(4,0)--(2,3)--cycle
(0,2)--(4,2)--(2,-1)--cycle (1,1) circle(1cm);
\filldraw(0,0)--(4,0)--(2,3)--cycle
(0,2)--(4,2)--(2,-1)--cycle (1,1) circle(1cm);
Wypełnianie kolorem ścieżek przecinających się lub zbudowanych z kilku
obszarów zamkniętych jest bardziej skomplikowane, gdyż trudno jest wyspecyfikować poszczególne części rysunku. Pomocne mogą być operacje nonzero rule
i even odd rule. Zastosowanie ich pozwala stwierdzić czy punkt leży wewnątrz
czy na zewnątrz obszaru który chcemy wypełnić.
Jeżeli opcja nonzero rule jest aktywna to do stwierdzenia czy dany punkt
A leży wewnątrz czy na zewnątrz ścieżki stosowana jest następująca metoda:
– Z punktu A prowadzimy promień tak by przecinał ścieżkę – być może kilkakrotnie. Jeśli w punkcie przecięcia ścieżka biegnie od „lewej do prawej”
(względem promienia) wówczas licznik którego wartość początkowa jest
równa zero jest zwiększany o 1, w przeciwnym przypadku jest zmniejszany o 1. Na koniec jest sprawdzana wartość licznika. Jeśli jest równy zero
wówczas punkt A leży na zewnątrz ścieżki, jeśli jest różny od zera, punkt
A leży wewnątrz.
Jeżeli opcja even odd rule jest aktywna inna metoda jest stosowana. Tak
samo jak poprzednio z punktu A prowadzimy promień przecinający ścieżkę.
Liczymy ile razy promień ją przetnie i mówimy, że punkt leży wewnątrz ścieżki
jeśli liczba jest nieparzysta, w przeciwnym wypadku punkt leży na zewnątrz
ścieżki.
3.
Środowisko scope i instrukcja \clip
Środowisko tikzpicture może przyjmować parametry graficzne (opcje) wpisane w miejscu argumentu opcje. Dotyczą one wtedy wszystkich poleceń, które
tworzą rysunek. Jeśli jednak chcielibyśmy zastosować parametry graficzne do
lokalnej grupy poleceń, to należy użyć środowiska grupującego scope. Jest ono
3
dostępne tylko wewnątrz środowiska tikzpicture i wywołujemy je w następujący sposób (w LATEX’u):
\begin{scope}[opcje]
zawartość środowiska
\end{scope}
Środowisko scope pobiera parametry graficzne jako opcjonalny argument
opcje i stosuje je do wszystkich elementów środowiska. Żadne polecenie występujące poza środowiskiem scope nie ma dostępu do tych opcji. Parametry
graficzne określone dla poszczególnych poleceń mogą nadpisywać te ustalone dla
całego obszaru.
\begin{tikzpicture}[red,line width=4pt]
\begin{scope}[yellow,line width=2pt]
\draw (0,3) -- (2,3) (0,3.5) -- (2,3.5);
\end{scope}
\draw (0,2) -- (2,2) (0,2.5) -- (2,2.5);
\begin{scope}[green,line width=6pt]
\draw (0,1) -- (2,1) (0,1.5) -- (2,1.5);
\draw[blue] (0,0.5)--(2,0.5) (0,0)--(2,0);
\end{scope}
\end{tikzpicture}
Wycinanie części rysunku (ścieżki) realizujemy poleceniem \clip. Jego składnia jest następująca
\clip <specyfikacja ścieżki>
Zastosowanie tej instrukcji spowoduje narysowanie tylko tej części rysunku, która znajduje się wewnątrz ścieżki podanej w argumencie <specyfikacja ścieżki>.
Poniższy przykład pokazuje którą część i z jakiego rysunku (obrazka) będziemy
wycinać,
\begin{tikzpicture}
\draw[dashed] (225:1.45cm)
rectangle +(45:2.9cm);
\draw (0,0) circle (2cm);
\draw (0:1cm) circle (1cm)
(90:1cm) circle (1cm)
(180:1cm) circle (1cm)
(270:1cm) circle (1cm);
\end{tikzpicture}
a kolejny tą wyciętą część.
4
\begin{tikzpicture}
\clip (225:1.45cm) rectangle +(45:2.9cm);
\draw (0,0) circle (2cm);
\draw (0:1cm) circle (1cm)
(90:1cm) circle (1cm)
(180:1cm) circle (1cm)
(270:1cm) circle (1cm);
\end{tikzpicture}
Polecenie \clip zastosowane do rysunku zawsze obejmuje wszystkie polecenia, które go konstruują. Jeżeli chcielibyśmy, by widoczny był cały rysunek
wraz z wycinanym fragmentem wówczas warto wykorzystać możliwości środowiska scope. Zmiany wprowadzane wscope są lokalne i żadne zastosowane tam
parametry graficzne nie zadziałają poza nim. Jeśli użyjemy \clip, gdziekolwiek
wewnątrz scope, efekt polecenia zakończy się wraz z zakończeniem środowiska.
Tym samym zapobiegamy „rozszerzaniu” wycinanego obszaru na inne obiekty.
Narysować
B
A
C
W powyższym przykładzie wycinanie zostało zastosowane wielokrotnie, dzięki czemu łatwo można uzyskać część wspólną zbiorów. Kolejność rysowania była
następująca: najpierw wewnątrz środowiska scope umieściliśmy instrukcje rysujące część wspólną trzech kół
\begin{scope}
\clip (0,0) circle (1.5cm);
5
\clip (60:2cm) circle (1.5cm);
\fill[gray] (0:2cm) circle (1.5cm);
\end{scope}
a następnie te koła narysowaliśmy
\draw (0,0) node[below]{A} circle (1.5cm);
\draw (60:2cm) node[above]{B} circle (1.5cm);
\draw (0:2cm) node[below]{C} circle (1.5cm);
W przypadku różnicy zbiorów trzeba zastosować pewną sztuczkę. Polega ona
na tym by dodać duży prostokąt, który obejmie cały rysunek, wyciąć go wraz ze
zbiorem, który nie może znaleźć się w różnicy, a następnie wypełnić poszukiwany
zbiór i użyć opcję even odd rule. Wynik widać na poniższym przykładzie.
B
A
6

Podobne dokumenty