MAT 172 – Matem´aticaComputacional Introdu¸c˜aoao TikZ

Lana Mara R. dos Santos

Departamento de Matem´atica Universidade Federal de Vi¸cosa

2016/II

[email protected] MAT 172 - 2016/II 1 / 41 PGF/TikZ

PGF/TikZ ´eum linguagens para produzir imagens vetoriais, isto ´e, imagens descritas a partir da sua descri¸c˜aogeom´etricaou alg´ebrica. O PGF ´euma linguagem de baixo n´ıvelenquanto TikZ ´eum conjunto de macros de alto n´ıvelque usa o PGF. Uma imagem vetorial normalmente ´ecomposta por pontos, curvas, pol´ıgonos,texto, entre outros elementos, isto ´e,utilizam vetores matem´aticospara sua descri¸c˜ao.As imagens vetoriais s˜aousualmente mais leves e n˜aoperdem qualidade ao serem ampliadas. O interpretador do PGF/TikZ pode ser usado dentro do LATEX. As imagens geradas podem ser ncorporadas ao texto de forma harm niosa. PGF/TikZ

O PGF/TikZ ´euma ferramenta extremamente poderosa e completa para criar elementos gr´aficossofisticados.

Exemplos de c´odigosde imagens usando o PGF/TikZ: http://www.texample.net Manual PGF/TikZ: http://repositorios.cpai.unb.br/ctan/ graphics/pgf/base/doc/pgfmanual. Existem v´arios softwares gratuitos para a edi¸c˜aode imagens vetoriais usando PGF/TikZ. Por exemplo:

TikzEdt GraTeX LATEXPIX ktikz

E´ poss´ıvelgerar c´odigo PGF/TikZ a partir do GeoGebra, SageMath, Inkscape, Octave, Gnuplot, dentre outros softwares gratuitos. Imagens Vetoriais Exportar Imagens Vetoriais no Geogebra

Exportar figura do Geogebra para o LATEX

Crie uma imagem no Geogebra. Escolha a janela de visualiza¸c˜aode interesse em arquivo/exportar. O Geogebra exporta em tr^espacotes para gerar imagens vetoriais: PStricks, Asymptote e PGF/TikZ. Na op¸c~aoLateX(beamer class) os elementos da imagem s~ao salvos para serem exibidos separadamente usando o comando \onslide.

[email protected] MAT 172 - 2016/II 4 / 41 comandos no TikZ Produzindo figuras com o TikZ

No preˆambulo´epreciso inserir o pacote tikz Para gerar uma imagem usa-se o ambiente tikzpicture. Dentro do ambiente, podem ser usados, dentre outros, os comandos: \draw – para desenhar linhas \fill – para preencher ´areascom cores s´olidas \shade – para preencher ´areascom cores gradientes \clip – para preencher ´areascom cores s´olidas que terminam com ponto-e-v´ırgula ; Com parˆametros opcionais altera-se os estilos de linhas e de preenchimentos. Para imagens geradas usando ´unico comando, pode se usar o comando \tikz no lugar do ambiente.

[email protected] MAT 172 - 2016/II 5 / 41 Exemplos

\begin{tikzpicture} \draw (0,1)--(1,0); \end{tikzpicture}

\begin{tikzpicture} \draw (0,1)--(1,0)--(2,2)--cycle; \end{tikzpicture}

\begin{tikzpicture} \draw (0,0) rectangle (2,2); \end{tikzpicture} Exemplos

\begin{tikzpicture} \draw (2,2) circle (1cm); \end{tikzpicture}

\begin{tikzpicture} \draw (0,0) ellipse (2cm and 0.5cm); \end{tikzpicture}

\begin{tikzpicture} \draw (1,0) arc (0:75:2cm); \end{tikzpicture} comandos no TikZ Mudan¸casno estilo padr˜ao Alterando estilos

Coloque os estilos desejados da linha no parˆametroopcional do \draw, separados por v´ırgulase tiver mais de um.

\begin{tikzpicture} \draw[<->, thick, blue] (0,4)--(0,0) -- (4,0); \draw[red, ultra thick, dashed] (2,2) circle (1cm); \end{tikzpicture}

[email protected] MAT 172 - 2016/II 8 / 41 comandos no TikZ Mudan¸casno estilo padr˜ao Grade

\begin{tikzpicture} \draw[step=0.5cm,help lines] (-1,-1) grid (3,2); \draw[red] (0,0)--(1,1); \draw[blue] (2,1) circle(0.1cm); \end{tikzpicture}

A grid B produz uma grade em que os pontos A e B s˜aoos v´erticesda diagonal principal da grade. help lines gera linhas cinzas e finas (o padr˜ao´ecor preta e espessura normal). step largura de cada subdivis˜aoda grade (o padr˜ao´e1)

[email protected] MAT 172 - 2016/II 9 / 41 comandos no TikZ cores Cores

black gray olive teal blue green orange violet brown lightgray pink white cyan lime purple yellow darkgray magenta red

Duas cores podem ser misturadas com o comando cor_1!X!cor_2 em que X ´ea porcentagem utilizada da cor_1. blue!40!red ´ea cor obtida com 40% azul e 60% de vermelho. Se a cor_2 for branca, ela pode ser omitida. Desta forma, produzem as mesmas cores os comandos cor!X!white e cor!X.

[email protected] MAT 172 - 2016/II 10 / 41 comandos no TikZ cores Alguns estilos de linhas

Espessura: Setas: Tracejada ou pontilhada:

ultra thin <- dotted <-> very thin densely dotted |->> thin >->> loosely dotted thick <<->> dashed double very thick loosely dashed ultra thick line width=4

[email protected] MAT 172 - 2016/II 11 / 41 comandos no TikZ comando fill Exemplo - fill

\begin{tikzpicture} \fill[blue] (0,0) rectangle (1,1); \fill[blue!40!] (1.5,0) rectangle (2.5,1); \fill[blue!40!lime, draw=black] (3,0) rectangle (4,1); \end{tikzpicture}

[email protected] MAT 172 - 2016/II 12 / 41 comandos no TikZ comando fill Exemplo

\begin{tikzpicture} \draw [fill=blue] (0,0) rectangle (1,1) rectangle (2,2); \draw [fill=white, fill opacity=0.5, double] (0.5,0.5) rectangle (1.5,1.5); \draw [fill=white] (3.5,0.5) rectangle (4.5,1.5); \draw [fill=blue] (3,0) rectangle (4,1) rectangle (5,2); \end{tikzpicture}

[email protected] MAT 172 - 2016/II 13 / 41 comandos no TikZ comando shade Exemplo - shade

\begin{tikzpicture} \shade[left color=blue,right color=red] (0,0) rectangle (1,1); \shade[top color=blue,bottom color=red] (1.5,0) rectangle (2.5,1); \shade[inner color=red,outer color=blue] (3,0) rectangle (4,1); \shade[inner color=blue, outer color=green, draw=black] (4.5,0) rectangle (5.5,1); \shade[ball color=blue!70!] (6,0) rectangle (7,1); \end{tikzpicture}

[email protected] MAT 172 - 2016/II 14 / 41 comandos no TikZ pontos em coordenadas cartesianas e polares Pontos

Podem ser em coordenadas: cartesianas valores (x, y) separados por v´ırgula— (0,1) polares valores (θ : r) separados por 2-pontos — (30:1)

\tikz\draw[->,magenta] (0,0)--(-45:1)--(30:2);

[email protected] MAT 172 - 2016/II 15 / 41 comandos no TikZ pontos em coordenadas cartesianas e polares Coordenadas relativas de um ponto

++ atualiza as coordenadas do ponto em rela¸c˜aoao ´ultimoponto. + atualiza as coordenadas do ponto em rela¸c˜aoao primeiro ponto.

\tikz\draw[->, thick, red] (1,1) -- ++(1,2) -- ++(2,1); \tikz\draw[->, thick, blue] (1,1) -- +(1,2) -- +(2,1);

[email protected] MAT 172 - 2016/II 16 / 41 comandos no TikZ foreach comando foreach

O comando foreach permite fazer itera¸c˜oesem uma lista. \foreach in .

\begin{tikzpicture} \foreach \x in {0, 2, ..., 10} \shade[ball color=green!\x0!red] (\x,0) circle (3mm); \end{tikzpicture}

Alguns exemplos de listas: comando sequˆenciagerada \foreach \x in {10,...,6} 10, 9, 8, 7, 6 \foreach \x in {a,...,f} a, b, c, d, e, f \foreach \x in {1,3,...,10} 1, 3, 5, 7, 9 \foreach \x in {0.1, 1,...,3,9,...,11} 0.1, 1, 2, 3, 9, 10,11

[email protected] MAT 172 - 2016/II 17 / 41 comandos no TikZ foreach comando foreach

\begin{tikzpicture}[scale=0.8] \foreach \x in {0,...,3} \foreach \y in {\x,...,3}{ \draw (\x,0.8*\y) circle (2mm); \fill[green] (\x,0.8*\y) circle (1mm); } \end{tikzpicture}

0 1 2 3 4 5 6 7 8 9 10

\begin{tikzpicture} \draw[fill=gray!10!] (-0.2, 0) rectangle (10.2,1); \foreach \x in {0,...,10} \draw (\x,0) -- (\x,0.4) (\x,0.6) node{\tiny\color{blue}\x}; \foreach \x in {0,...,20} \draw (0.5*\x,0) -- (0.5*\x,0.3); \foreach \x in {0,...,100} \draw (0.1*\x,0) -- (0.1*\x,0.2); \end{tikzpicture}

[email protected] MAT 172 - 2016/II 18 / 41 Comando node

O comando \node pode ser usado para rotular um n´o(para ser usado, por exemplo em outro comando) ou para exibir algum r´otulopara o n´o.

\node[opcionais] at ponto {texto } ponto node[opcionais]{ texto }

\begin{tikzpicture} \node[draw] (a) at (0, 0) {A}; \node[circle,fill=green] (b) at (0: 1.5) {B}; \draw [->] (a) -- (b); \draw [->] (4,0) node[left,draw, fill=green] {$v_i$} -- ++(0: 1) node[circle,right,draw] {$\alpha$}; \end{tikzpicture}

A B vi α comandos no TikZ comando node Opcionais do node

Alguns opcionais de posi¸c˜aodo node: above, below, left, right, above right, below left, etc. xshift=comprimento e yshift=comprimento pos=n´umeroentre 0 e 1 (para caminhos)

\begin{tikzpicture} \draw[blue,rotate=30] (0,0) rectangle (2,1); \draw[dashed] (0,0)--node[pos=.5,below] {\tiny $x$} (2,0); \draw[->] (0.5,0) node[above right] {\tiny $\theta=30^o$} arc (0:30:0.5); \end{tikzpicture}

θ = 30o x

[email protected] MAT 172 - 2016/II 20 / 41 comandos no TikZ comando clip Comando \clip

O comando \clip ´eusado para recortar regi˜oesde modo que tudo que estiver fora dela (e que foi definido depois) n˜ao´eexibido.

\begin{tikzpicture} \draw[blue] (-1,-1) rectangle (1,1); \clip (0,0) circle (1cm); \fill[lime] (0,1) rectangle (-1,-1); \end{tikzpicture}

[email protected] MAT 172 - 2016/II 21 / 41 comandos no TikZ comando clip Comando \clip

O efeito de m´ultiploscomandos \clip ´ea exibi¸c˜aoda interse¸c˜aodas regi˜oesrecortadas.

\begin{tikzpicture} \draw[blue] (-1,-1) rectangle (1,1); \clip (0,0) circle (1cm); \clip (-1,-1) rectangle (0,0); \fill[lime] (0,1) rectangle (-1,-1); \end{tikzpicture}

[email protected] MAT 172 - 2016/II 22 / 41 comandos no TikZ comando clip Comando \clip

O ambiente scope delimita a ´areaque ser´aafetada pelos comandos \clip

\begin{tikzpicture} \begin{tikzpicture} \draw[blue] (-1,-1) rectangle (1,1); \draw[blue] (-1,-1) rectangle (1,1); \clip (0,0) circle (1cm); \begin{scope} \clip (-1,-1) rectangle (0,0); \clip (0,0) circle (1cm); \fill[lime] (0,1) rectangle (-1,-1); \clip (-1,-1) rectangle (0,0); \draw (0,0) circle (1cm); \fill[lime] (0,1) rectangle (-1,-1); \end{tikzpicture} \end{scope} \draw (0,0) circle (1cm); \end{tikzpicture}

[email protected] MAT 172 - 2016/II 23 / 41 comandos no TikZ comando clip Exemplo

\begin{tikzpicture} \begin{scope} \clip (0,0) circle (1.5cm); \clip (45:2cm) circle (1.5cm); \fill[lime] (0:2cm) circle (1.5cm); \end{scope} \draw (0,0) circle (1.5cm) node[left] {$A$}; \draw (45:2cm) circle (1.5cm) node [above] {$B$}; \draw (0:2cm) circle (1.5cm) node [below right] {$C$}; \end{tikzpicture}

B

A C

[email protected] MAT 172 - 2016/II 24 / 41 comandos no TikZ Linhas curvas Linhas curvas

ligue pontos com o comando to [out=^angulo-sa´ıda ,in=^angulo-chegada ]

\begin{tikzpicture} \draw [<->,thick, cyan] (0,0) to [out=90,in=180] (1,1) to [out=0,in=180] (3,0); \end{tikzpicture}

[email protected] MAT 172 - 2016/II 25 / 41 Desenho de curvas Curvas

Uma curva pode ser desenhada com o comando plot({f(\x)},{g(\x)}) em que \x ´ea vari´avele f e g s˜aofun¸c˜oesde \x.

\begin{tikzpicture} \draw[->] (-3,0)--(3,0); \draw[->] (0,-1)--(0,4); \draw[blue,domain=-2:2] plot(\x,{(\x)^2}); \end{tikzpicture}

[email protected] MAT 172 - 2016/II 26 / 41 Desenho de curvas Curvas

\begin{tikzpicture}[domain=-3:3] \draw[->] (-3,0) -- (5,0) node[right] {$x$}; \draw[->] (0,-3) -- (0,5) node[above] {$y$}; \draw[scale=0.5,blue] plot (\x,{(\x)^2}); \draw[scale=0.5,red] plot ({\x*\x},\x); \end{tikzpicture} y

x

[email protected] MAT 172 - 2016/II 27 / 41 Desenho de curvas Curvas

A curva ´eproduzida ligando um conjunto de pontos tabelados. O n´umerode pontos pode ser ajustado com o opcional samples=. Al´emdeste comando, o opcional smooth suaviza a curva gerada pela interpola¸c˜aodos pontos da tabela.

\begin{tikzpicture} \draw[->] (-2*pi-0.5,0) -- (2*pi+0.5,0) node[right] {$x$}; \draw[->] (0,-1.5) -- (0, 1.5) node[above] {$y$}; \draw[blue, domain=-2*pi:2*pi, smooth] plot (\x,{sin(\x r)}); \end{tikzpicture} y

x

O angulo padr˜ao´eem graus. Para definir em radianos ´epreciso acrescentar r no parˆametroda fun¸c˜aotrigonom´etrica(como no caso da fun¸c˜aoseno na imagem.).

[email protected] MAT 172 - 2016/II 28 / 41 Desenho de curvas Curvas - Exemplo

\begin{tikzpicture}[domain=0:4] \draw[help lines] (-0.1,-1.1) grid (3.9,3.9); \draw[->] (-1,0) -- (4,0) node[right] {$x$}; \draw[->] (0,-1) -- (0, 4) node[above] {$y$}; \draw[blue] plot (\x,{sin(\x r)}) node[right] {$f(x) = \text{sen\,}x$}; \draw[orange] plot (\x,{0.05*exp(\x)}) node[right] {$g(x) = \frac{1}{20} \mathrm e^x$}; \end{tikzpicture} y

1 x g(x) = 20 e

x f (x) = sen x

[email protected] MAT 172 - 2016/II 29 / 41 Curvas - Exemplos

\begin{tikzpicture}[xscale=10,yscale=3] \draw [<->] (0,1) -- (0,0) -- (0.6,0); \draw[green, thick, domain=0:0.5] plot (\x, {0.025+\x+(\x)^2}); \end{tikzpicture} Curvas - Exemplo

\begin{tikzpicture}[scale=0.4] \draw[->] (-5,0) -- (5,0) node[right] {$x$}; \draw[->] (0,-5) -- (0,5) node[above] {$y$}; \draw[scale=0.5,blue, samples=100, domain=0:4*pi] plot ({\x*sin(\x r)},{\x*cos(\x r)}); \end{tikzpicture} y

x Desenho de curvas Curvas

Para desenhar o gr´aficode fun¸c˜oesdescont´ınuasa estrat´egiamais simples ´edividir a fun¸c˜aopelas partes cont´ınuas.

\begin{tikzpicture}[scale=0.4] \draw[->] (-4,0) -- (4,0) node[right] {$x$}; \draw[->] (0,-4) -- (0,4) node[above] {$y$}; \draw[domain=-7/2:-1/4,color=blue] plot (\x,{1/\x}); \draw[domain=1/4:7/2,blue] plot (\x,{1/\x}) node[above] {$y=\frac{1}{x}$}; \end{tikzpicture} y

1 y = x x

[email protected] MAT 172 - 2016/II 32 / 41 Desenho de curvas Curvas

E´ poss´ıvelespecificar o nome da vari´avelem vez de usar o padr˜ao \x.

\begin{tikzpicture}[scale=0.5] \draw[->] (-3.2,0) -- (3.2,0) node[right] {$x$}; \draw[->] (0,-3.2) -- (0,3.2) node[above] {$y$}; \draw (-3,-3) -- (3,3) (-3,3) -- (3,-3); \draw[blue,domain=-1.8:1.8,variable=\t] plot ({cosh(\t)},{sinh(\t)}) node[right]{$x^2-y^2=1$}; \draw[blue,domain=-1.8:1.8,variable=\t] y plot ({-cosh(\t)},{sinh(\t)}); x 2 − y 2 = 1 \end{tikzpicture}

x

[email protected] MAT 172 - 2016/II 33 / 41 Desenho de curvas Area´ Hachurada Regi˜oesHachuradas

\begin{tikzpicture} \fill[blue!40!] (pi/4,0) -- plot [domain=pi/4:3*pi/4] (\x,{sin(\x r)}) -- (3*pi/4,0) -- cycle; \draw plot[domain=0:pi] (\x,{sin(\x r)}); \draw[<->] (-0.3,0) -- (pi+0.3,0); \end{tikzpicture}

[email protected] MAT 172 - 2016/II 34 / 41 Desenho de curvas Area´ Hachurada Regi˜oesHachuradas

\begin{tikzpicture} \shade[left color=blue!40!green, right color=green, domain=1:2] (1,0)--plot (\x,{1/\x})--(2,0)--cycle; \draw[domain=0.8:2.4, blue, thick] plot (\x,{1/\x}); \draw (1,0) node[below]{\tiny $a$} (2,0) node[below]{\tiny $b$}; \draw[->] (-1,0) -- (2.6,0) node[right] {$x$}; \draw[->] (0,-0.5) -- (0,1.5) node[above] {$y$}; \end{tikzpicture}

y

x a b

[email protected] MAT 172 - 2016/II 35 / 41 Desenho de curvas Figura 3D Exemplo Figura 3D

\begin{tikzpicture} \shade[bottom color=red] (0,0,0)--(1,0,0)--(1,2,0)--(0,2,0)--cycle; \shade[top color=gray] (0,2,0)--(0,2,-2)--(1,2,-2)--(1,2,0)--cycle; \shade[left color=blue] (1,0,0)--(1,2,0)--(1,2,-2)--(1,0,-2)--cycle; \end{tikzpicture}

[email protected] MAT 172 - 2016/II 36 / 41 gr´aficoscom o pacote pgfplots Pacote pgfplots

O pgfplots ´eum pacote para ser usado com o TikZ que permite a constru¸c˜aode gr´aficosmais complexos.

Inserir no preˆambulo: \usepackage{pgfplots} Em um ambiente tikzpicture, inserir o ambiente axis que diz respeito aos eixos dos gr´aficos: \begin{tikzpicture} \begin{axis}[opcionais] \end{axis} \end{tikzpicture} Dentro do ambiente axis: para gr´aficos2D: \addplot[opcionais]{fun¸c~ao} para gr´aficos3D: \addplot3[opcionais]{fun¸c~ao}

[email protected] MAT 172 - 2016/II 37 / 41 gr´aficoscom o pacote pgfplots Gr´aficosem 2D Exemplo

\begin{tikzpicture} \begin{tikzpicture} \begin{axis} \begin{axis} \addplot(\x,{sin(\x r)}); \addplot[smooth](\x,{sin(\x r)}); \end{axis} \end{axis} \end{tikzpicture} \end{tikzpicture}

1 1

0.5 0.5

0 0

−0.5 −0.5

−1 −1

−6 −4 −2 0 2 4 6 −6 −4 −2 0 2 4 6

[email protected] MAT 172 - 2016/II 38 / 41 Exemplo

\begin{tikzpicture} \begin{axis}[xlabel=$x$, ylabel=$y$, ytick={1}, axis lines=center, xmin=-4,xmax=4,ymin=-3,ymax=5,scale=0.8,transform shape] \addplot[smooth]{x^3}; \draw[dotted, thick, red] (axis cs:0,1)--(axis cs:1,1)--(axis cs:1,0); \addplot [mark=o,ultra thin,draw=black] coordinates {(1,1)}; \end{axis} \end{tikzpicture}

1

−4 −2 2 4

y

x gr´aficoscom o pacote pgfplots Curvas em 3D Exemplo Gr´aficos3D

\begin{tikzpicture} \begin{axis}[domain=-3:3] \addplot3[surf]{-y^2 + x^2}; \addplot3[surf]{x^2 + y^2)}; \end{axis} \end{tikzpicture}

20

0 2 0 −2 0 2 −2

[email protected] MAT 172 - 2016/II 40 / 41 gr´aficoscom o pacote pgfplots Bibliotecas adicionais Bibliotecas especiais

\usepgfplotslibrary{fillbetween}

\begin {axis}[smooth,no markers,axis lines=center, xmin=-3.5,xmax=3.5,ymin=-3,ymax=4, xticklabels={},yticklabels={}] \addplot [domain=-3:3] {-x^2+2}; \addplot [domain=-3:3]{x}; % \addplot [name path=A, domain=-2:1] {x}; \addplot [name path=B, domain=-2:1] {-x^2+2}; \addplot [fill=magenta, fill opacity=0.4] fill between[of=B and A]; \end {axis} \end {tikzpicture}

[email protected] MAT 172 - 2016/II 41 / 41