MAT 172 Matemática Computacional Introdução ao TikZ Lana Mara R. dos Santos Departamento de Matemática Universidade Federal de Viçosa 2016/II lanamara@ufv.br MAT 172-2016/II 1 / 41
PGF/TikZ PGF/TikZ é um linguagens para produzir imagens vetoriais, isto é, imagens descritas a partir da sua descrição geométrica ou algébrica. O PGF é uma linguagem de baixo nível enquanto TikZ é um conjunto de macros de alto nível que usa o PGF. Uma imagem vetorial normalmente é composta por pontos, curvas, poĺıgonos, texto, entre outros elementos, isto é, utilizam vetores matemáticos para sua descrição. As imagens vetoriais são usualmente mais leves e não perdem qualidade ao serem ampliadas. O interpretador do PGF/TikZ pode ser usado dentro do L A TEX. As imagens geradas podem ser ncorporadas ao texto de forma harm niosa.
PGF/TikZ O PGF/TikZ é uma ferramenta extremamente poderosa e completa para criar elementos gráficos sofisticados. Exemplos de códigos de imagens usando o PGF/TikZ: http://www.texample.net Manual PGF/TikZ: http://repositorios.cpai.unb.br/ctan/ graphics/pgf/base/doc/pgfmanual.pdf Existem vários softwares gratuitos para a edição de imagens vetoriais usando PGF/TikZ. Por exemplo: TikzEdt GraTeX L A TEXPIX ktikz É possível gerar código 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 L A TEX Crie uma imagem no Geogebra. Escolha a janela de visualização de interesse em arquivo/exportar. O Geogebra exporta em tr^es pacotes para gerar imagens vetoriais: PStricks, Asymptote e PGF/TikZ. Na opç~ao LateX(beamer class) os elementos da imagem s~ao salvos para serem exibidos separadamente usando o comando \onslide. lanamara@ufv.br MAT 172-2016/II 4 / 41
comandos no TikZ Produzindo figuras com o TikZ No preâmbulo é preciso 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 áreas com cores sólidas \shade para preencher áreas com cores gradientes \clip para preencher áreas com cores sólidas que terminam com ponto-e-vírgula ; Com parâmetros opcionais altera-se os estilos de linhas e de preenchimentos. Para imagens geradas usando único comando, pode se usar o comando \tikz no lugar do ambiente. lanamara@ufv.br MAT 172-2016/II 5 / 41
Exemplos \draw (0,1)--(1,0); \draw (0,1)--(1,0)--(2,2)--cycle; \draw (0,0) rectangle (2,2);
Exemplos \draw (2,2) circle (1cm); \draw (0,0) ellipse (2cm and 0.5cm); \draw (1,0) arc (0:75:2cm);
comandos no TikZ Mudanças no estilo padrão Alterando estilos Coloque os estilos desejados da linha no parâmetro opcional do \draw, separados por vírgula se tiver mais de um. \draw[<->, thick, blue] (0,4)--(0,0) -- (4,0); \draw[red, ultra thick, dashed] (2,2) circle (1cm); lanamara@ufv.br MAT 172-2016/II 8 / 41
comandos no TikZ Mudanças no estilo padrão Grade \draw[step=0.5cm,help lines] (-1,-1) grid (3,2); \draw[red] (0,0)--(1,1); \draw[blue] (2,1) circle(0.1cm); A grid B produz uma grade em que os pontos A e B são os vértices da diagonal principal da grade. help lines gera linhas cinzas e finas (o padrão é cor preta e espessura normal). step largura de cada subdivisão da grade (o padrão é 1) lanamara@ufv.br MAT 172-2016/II 9 / 41
comandos no TikZ cores Cores black blue brown cyan darkgray gray green lightgray lime magenta olive orange pink purple red teal violet white yellow Duas cores podem ser misturadas com o comando cor_1!x!cor_2 em que X é a porcentagem utilizada da cor_1. blue!40!red é a 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. lanamara@ufv.br MAT 172-2016/II 10 / 41
comandos no TikZ cores Alguns estilos de linhas Espessura: ultra thin very thin thin thick very thick ultra thick line width=4 Setas: <- <-> ->> >->> <<->> double Tracejada ou pontilhada: dotted densely dotted loosely dotted dashed loosely dashed lanamara@ufv.br MAT 172-2016/II 11 / 41
comandos no TikZ comando fill Exemplo - fill \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); lanamara@ufv.br MAT 172-2016/II 12 / 41
comandos no TikZ comando fill Exemplo \draw [fill=blue] (0,0) rectangle (1,1) rectangle (2,2); \draw [fill=white, fill opacity=0.5, double] (0.5,0.5) rectang \draw [fill=white] (3.5,0.5) rectangle (4.5,1.5); \draw [fill=blue] (3,0) rectangle (4,1) rectangle (5,2); lanamara@ufv.br MAT 172-2016/II 13 / 41
comandos no TikZ comando shade Exemplo - shade \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 ( \shade[ball color=blue!70!] (6,0) rectangle (7,1); lanamara@ufv.br 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); lanamara@ufv.br 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ção ao último ponto. + atualiza as coordenadas do ponto em relação ao primeiro ponto. \tikz\draw[->, thick, red] (1,1) -- ++(1,2) -- ++(2,1); \tikz\draw[->, thick, blue] (1,1) -- +(1,2) -- +(2,1); lanamara@ufv.br MAT 172-2016/II 16 / 41
comandos no TikZ foreach comando foreach O comando foreach permite fazer iterações em uma lista. \foreach <variables> in <list> <commands>. \foreach \x in {0, 2,..., 10} \shade[ball color=green!\x0!red] (\x,0) circle (3mm); Alguns exemplos de listas: comando sequência gerada \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 lanamara@ufv.br MAT 172-2016/II 17 / 41
comandos no TikZ foreach comando foreach [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); } 0 1 2 3 4 5 6 7 8 9 10 \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); lanamara@ufv.br MAT 172-2016/II 18 / 41
Comando node O comando \node pode ser usado para rotular um nó (para ser usado, por exemplo em outro comando) ou para exibir algum rótulo para o nó. \node[opcionais] at ponto {texto } ponto node[opcionais] {texto } \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$}; A B v i α
comandos no TikZ comando node Opcionais do node Alguns opcionais de posição do node: above, below, left, right, above right, below left, etc. xshift=comprimento e yshift=comprimento pos=número entre 0 e 1 (para caminhos) \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); θ = 30 o x lanamara@ufv.br MAT 172-2016/II 20 / 41
comandos no TikZ comando clip Comando \clip O comando \clip é usado para recortar regiões de modo que tudo que estiver fora dela (e que foi definido depois) não é exibido. \draw[blue] (-1,-1) rectangle (1,1); \clip (0,0) circle (1cm); \fill[lime] (0,1) rectangle (-1,-1); lanamara@ufv.br MAT 172-2016/II 21 / 41
comandos no TikZ comando clip Comando \clip O efeito de múltiplos comandos \clip é a exibição da interseção das regiões recortadas. \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); lanamara@ufv.br MAT 172-2016/II 22 / 41
comandos no TikZ comando clip Comando \clip O ambiente scope delimita a área que será afetada pelos comandos \clip \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); \draw (0,0) circle (1cm); \draw[blue] (-1,-1) rectangle (1,1); \begin{scope} \clip (0,0) circle (1cm); \clip (-1,-1) rectangle (0,0); \fill[lime] (0,1) rectangle (-1,-1); \end{scope} \draw (0,0) circle (1cm); lanamara@ufv.br MAT 172-2016/II 23 / 41
comandos no TikZ comando clip Exemplo \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$}; B A C lanamara@ufv.br 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 ] \draw [<->,thick, cyan] (0,0) to [out=90,in=180] (1,1) to [out=0,in=180] (3,0); lanamara@ufv.br 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 é a variável e f e g são funções de \x. \draw[->] (-3,0)--(3,0); \draw[->] (0,-1)--(0,4); \draw[blue,domain=-2:2] plot(\x,{(\x)^2}); lanamara@ufv.br MAT 172-2016/II 26 / 41
Desenho de curvas Curvas [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); y x lanamara@ufv.br MAT 172-2016/II 27 / 41
Desenho de curvas Curvas A curva é produzida ligando um conjunto de pontos tabelados. O número de pontos pode ser ajustado com o opcional samples=<num pontos>. Além deste comando, o opcional smooth suaviza a curva gerada pela interpolação dos pontos da tabela. \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)}); y x O angulo padrão é em graus. Para definir em radianos é preciso acrescentar r no parâmetro da função trigonométrica (como no caso da função seno na imagem.). lanamara@ufv.br MAT 172-2016/II 28 / 41
Desenho de curvas Curvas - Exemplo [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$}; y g(x) = 1 20 ex x f (x) = sen x lanamara@ufv.br MAT 172-2016/II 29 / 41
Curvas - Exemplos [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});
Curvas - Exemplo [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)}); y x
Desenho de curvas Curvas Para desenhar o gráfico de funções descontínuas a estratégia mais simples é dividir a função pelas partes contínuas. [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}$}; y y = 1 x x lanamara@ufv.br MAT 172-2016/II 32 / 41
Desenho de curvas Curvas É possível especificar o nome da variável em vez de usar o padrão \x. [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 x lanamara@ufv.br MAT 172-2016/II 33 / 41
Desenho de curvas Área Hachurada Regiões Hachuradas \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); lanamara@ufv.br MAT 172-2016/II 34 / 41
Desenho de curvas Área Hachurada Regiões Hachuradas \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$}; y a b x lanamara@ufv.br MAT 172-2016/II 35 / 41
Desenho de curvas Figura 3D Exemplo Figura 3D \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; lanamara@ufv.br MAT 172-2016/II 36 / 41
gráficos com o pacote pgfplots Pacote pgfplots O pgfplots é um pacote para ser usado com o TikZ que permite a construção de gráficos mais complexos. Inserir no preâmbulo: \usepackage{pgfplots} Em um ambiente tikzpicture, inserir o ambiente axis que diz respeito aos eixos dos gráficos: \begin{axis}[opcionais] <comandos> \end{axis} Dentro do ambiente axis: para gráficos 2D: \addplot[opcionais]{funç~ao} para gráficos 3D: \addplot3[opcionais]{funç~ao} lanamara@ufv.br MAT 172-2016/II 37 / 41
gráficos com o pacote pgfplots Gráficos em 2D Exemplo \begin{axis} \addplot(\x,{sin(\x r)}); \end{axis} \begin{axis} \addplot[smooth](\x,{sin(\x r)}); \end{axis} 1 1 0.5 0.5 0 0 0.5 0.5 1 6 4 2 0 2 4 6 1 6 4 2 0 2 4 6 lanamara@ufv.br MAT 172-2016/II 38 / 41
Exemplo \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} 1 4 2 2 4
gráficos com o pacote pgfplots Curvas em 3D Exemplo Gráficos 3D \begin{axis}[domain=-3:3] \addplot3[surf]{-y^2 + x^2}; \addplot3[surf]{x^2 + y^2)}; \end{axis} 20 0 2 0 2 0 2 2 lanamara@ufv.br MAT 172-2016/II 40 / 41
gráficos com 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} lanamara@ufv.br MAT 172-2016/II 41 / 41