Neste capítulo, vamos continuar ampliando nosso conhecimento sobre como traçar segmentos de reta para fazer figuras fechadas, como polígonos. Vamos também aprender a usar bibliotecas, que são conjuntos de comandos não disponibilizados por padrão pela TikZ. Bibliotecas acrescentam novas funcionalidades na linguagem, fornecendo soluções mais rápidas para problemas que aparecem com frequência na programação e no desenvolvimento de ilustrações.
Como objetivo deste capítulo, temos a ilustração seguinte:

Esta é a ilustração de um teorema muito conhecido da geometria, o teorema de Varignon: a figura formada pela união do pontos médios dos lados de um quadrilátero qualquer é um paralelogramo. Esse teorema, que leva o nome do matemático francês Pierre Varignon (1654 – 1722), era certamente conhecido de geômetras anteriores e ainda hoje mantém seu fascínio. Usuários de softwares de geometria dinâmica, como o Geogebra, costumam utilizá-lo para treinar suas capacidades investigativas.
Vejamos como criar essa ilustração com a TikZ.
Desenho
Em primeiro lugar, uma malha feita não com [help lines]
, mas com um tom de cinza ainda mais claro:
\begin{tikzpicture} \draw [gray!20] (0,0) grid (8,5); \end{tikzpicture}
O parâmetro [gray!20]
significa que a cor das linhas da malha é de 20% do tom padrão de cinza (gray).
Essa maneira de especificar um tom de cor tem que ser bem entendida, uma vez que será utilizada em muitos outros momentos. Por exemplo, se você pretende diminuir a intensidade do tom padrão de vermelho de uma determinada linha para 40%, você deve escrever [red!40]
como parâmetro da linha. Observe que a cor é separada da porcentagem por um sinal de exclamação (!). A expressão toda deve ser lida como “vermelho a 40%”.
Estabelecida a malha, vamos escolher as coordenadas dos pontos do quadrilátero ABCD. Mas vamos fazê-lo dando um nome a cada uma das coordenadas com o comando \coordinate
.
O comando \coordinate
Imagine que você precisa usar o mesmo ponto em dez lugares do seu código. Se você resolve modificar suas coordenadas, precisará fazer isso dez vezes, correndo o risco de errar uma ou mais vezes. Por isso, nomeamos os pontos para usá-los em vários lugares do nosso código.
Como exemplo, vamos chamar o ponto (2, 0) de ponto A. Usando o comando \coordinate
, escrevemos:
\coordinate (A) at (2, 0);
Isso nos diz que o ponto A está nas (at
) coordenadas (2, 0). Depois usaremos simplesmente (A) em vez de (2, 0) toda vez que precisarmos desse ponto.
Vamos nomear agora como A, B, C e D os pontos (2, 0), (6, 0), (8,2) e (0, 5), respectivamente:
\begin{tikzpicture} \draw [gray!20] (0,0) grid (8,5); \coordinate (A) at (2,0); \coordinate (B) at (6,0); \coordinate (C) at (8,2); \coordinate (D) at (0,5); \end{tikzpicture}
Por enquanto, não há figura nenhuma. Se você executar o código, pressionando F1 no Texmaker, a figura gerada será apenas a malha. Nomear pontos não gera imagem nenhuma.
O que vai gerar a imagem do quadrilátero será o comando seguinte, que vai unir cada um desses pontos consecutivamente:
\begin{tikzpicture} \draw [gray!20] (0,0) grid (8,5); \coordinate (A) at (2,0); \coordinate (B) at (6,0); \coordinate (C) at (8,2); \coordinate (D) at (0,5); \draw (A) -- (B) -- (C) -- (D) -- (A); \end{tikzpicture}
A figura fica:

Observe como usamos o comando \draw
. Unimos os pontos A, B, C, D e novamente A com dois hifens entre os pontos, gerando o quadrilátero fechado. Você pode usar essa maneira de traçar segmentos quando eles são consecutivos, um depois do outro.
Para fechar uma figura, a TikZ disponibiliza o comando cycle
(ciclo), para que você não precise repetir o primeiro ponto no fim de uma figura fechada. Ou seja, em vez de escrever
\draw (A) -- (B) -- (C) -- (D) -- (A);
você pode escrever
\draw (A) -- (B) -- (C) -- (D) -- cycle;
o que torna o código mais legível, indicando que ali há uma figura fechada.
Feito o quadrilátero original, vamos ao paralelogramo interno, criado com a ligação dos pontos médios de cada lado do quadrilátero original.
A biblioteca calc
Bibliotecas são arquivos que acrescentamos no começo de programas para ter acesso a novas funções e comandos. Uma biblioteca muito importante, chamada calc
, dá à TikZ a capacidade de realizar operações com as coordenadas dos pontos.
Na linguagem LaTeX, bibliotecas são acrescentadas no preâmbulo. Bibliotecas TikZ são acrescentadas lá com o comando \usetikzlibray
:
\documentclass[tikz]{standalone}
\usepackage[brazil]{babel}
\usepackage[T1]{fontenc}
\usetikzlibrary{calc}
\begin{document}
\begin{tikzpicture}
.
.
.
Observe que utilizamos o comando \usetikzlibrary{calc}
antes mesmo de \begin{document}
.
Precisamos agora encontrar o ponto médio do segmento AB. Vamos chamá-lo, criativamente, de M. O que a biblioteca calc
nos proporciona? A possibilidade de encontrar esse ponto sem calculá-lo em um papel à parte utilizando cansativamente a fórmula (A+B)/2. Para que a calc
faça esse cálculo para você, escreva $(A)!0.5!(B)$ dentro dos parênteses das coordenadas de M:
\coordinate (M) at ($(A)!0.5!(B)$);
Observe atentamente a expressão: o ponto A está separado de B por !0.5!
. Com isso, a biblioteca calc
atribuirá a M as coordenadas de um ponto que está a 50% de distância tanto de A quanto de B, ou seja, no ponto médio de AB.
Repita o processo com os outros pontos, que vamos chamar de N, O e P, e acrescente, por fim, o comando \draw (M) -- (N) -- (O) -- (P) -- cycle
; para criar o paralelogramo:
\begin{tikzpicture} \draw [gray!20] (0,0) grid (8,5); \coordinate (A) at (2,0); \coordinate (B) at (6,0); \coordinate (C) at (8,2); \coordinate (D) at (0,5); \draw (A) -- (B) -- (C) -- (D) -- cycle; \coordinate (M) at ($(A)!0.5!(B)$); \coordinate (N) at ($(B)!0.5!(C)$); \coordinate (O) at ($(C)!0.5!(D)$); \coordinate (P) at ($(D)!0.5!(A)$); \draw (M) -- (N) -- (O) -- (P) -- cycle; \end{tikzpicture}
Executado, esse programa gera:

Exatamente como queríamos.
Vamos agora nomear os pontos e preencher o paralelogramo.
Texto
Chamamos de A, B, C e D os vértices do quadrilátero externo e de M, N, O e P os pontos médios dos lados AB, BC, CD e DA. Vamos escrever esses nomes ao redor dos pontos A, B, C e D e também ao redor de M, N, O e P. Lembre-se que utilizamos node
para isso:
\begin{tikzpicture} \draw [gray!20] (0,0) grid (8,5); \coordinate (A) at (2,0); \coordinate (B) at (6,0); \coordinate (C) at (8,2); \coordinate (D) at (0,5); \draw (A) -- (B) -- (C) -- (D) -- cycle; \coordinate (M) at ($(A)!0.5!(B)$); \coordinate (N) at ($(B)!0.5!(C)$); \coordinate (O) at ($(C)!0.5!(D)$); \coordinate (P) at ($(D)!0.5!(A)$); \draw (M) -- (N) -- (O) -- (P) -- cycle; \draw (A) node {A}; \draw (B) node {B}; \draw (C) node {C}; \draw (D) node {D}; \draw (M) node {M}; \draw (N) node {N}; \draw (O) node {O}; \draw (P) node {P}; \end{tikzpicture}
Lembre-se que \draw (A) node {A}
significa, rebarbativamente, “desenhe na posição A a letra A”, e assim por diante.
Temos então a ilustração:

Os rótulos não estão no lugar certo. Vamos melhorar isso na próxima fase.
Decoração
Para ajustar o texto, comecemos utilizando os parâmetros above, below, left
e right
nas linhas que desenham os rótulos. A escolha que fiz é a que se segue, mas você pode escolher outras localizações:
\draw [below] (A) node {A}; \draw [below] (B) node {B}; \draw [right] (C) node {C}; \draw [left] (D) node {D}; \draw [below] (M) node {M}; \draw [right] (N) node {N}; \draw [above] (O) node {O}; \draw [left] (P) node {P};
Temos então:

Falta apenas preencher o paralelogramo com o padrão de pontilhado. Utilizaremos uma outra biblioteca para isso: patterns
(padrões).
A biblioteca patterns
Há uma outra biblioteca que utilizaremos na ilustração. É a biblioteca patterns
, que significa “padrões”. Com ela, podemos preencher áreas com vários grafismos.
Para usá-la, você pode acrescentar o comando \usetikzlibrary{patterns}
logo depois de \usetikzlibrary{calc}
, mas vamos economizar tempo e escrever:
\usetikzlibrary{calc,patterns}
Você pode acrescentar todas as bibliotecas com apenas um comando \usetikz
library, separando cada uma com uma vírgula.
Agora, vamos a um comando também muito usado para preencher áreas.
O comando \fill
Para preencher áreas com cores ou padrões, usamos \fill, um comando que funciona como \draw.
Acrescente \fill (M) -- (N) -- (O) -- (P);
logo depois das linhas que deram nomes aos pontos M, N, O e P:
. . . \draw [below] (M) node {M}; \draw [right] (N) node {N}; \draw [above] (O) node {O}; \draw [left] (P) node {P}; \fill (M) -- (N) -- (O) -- (P); \end{tikzpicture}
Execute o programa, teclando F1 no Texmaker (faça isso agora!!). O que aconteceu?
Não foi o que você esperava, não é? O paralelogramo apareceu inteiramente preto! Para preenchê-lo com um padrão de pontos, acrescente [pattern=dots]
logo depois de \fill
:
\fill [pattern=dots] (M) -- (N) -- (O) -- (P);
Agora comente a linha que gera a malha usando o símbolo % na frente dela e execute o programa. Se tudo correu bem, terminamos a ilustração:

Observe que \fill
não exige que você escreva cycle
no final!
O programa todo fica:
\begin{tikzpicture} % \draw [gray!20] (0,0) grid (8,5); \coordinate (A) at (2,0); \coordinate (B) at (6,0); \coordinate (C) at (8,2); \coordinate (D) at (0,5); \draw (A) -- (B) -- (C) -- (D) -- cycle; \coordinate (M) at ($(A)!0.5!(B)$); \coordinate (N) at ($(B)!0.5!(C)$); \coordinate (O) at ($(C)!0.5!(D)$); \coordinate (P) at ($(D)!0.5!(A)$); \draw (M) -- (N) -- (O) -- (P) -- cycle; \draw [below] (A) node {A}; \draw [below] (B) node {B}; \draw [right] (C) node {C}; \draw [left] (D) node {D}; \draw [below] (M) node {M}; \draw [right] (N) node {N}; \draw [above] (O) node {O}; \draw [left] (P) node {P}; \fill [pattern=dots] (M) -- (N) -- (O) -- (P); \end{tikzpicture}
Está complicando? Veremos mais adiante, nos próximos capítulos, como escrever com mais concisão.
Resumo
Bibliotecas
\usetikzlbrary{calc}
– declarada no preâmbulo, carrega a bibliotecacalc
, usada para realizar operações elementares com coordenadas\usetikzlibrary{patterns}
– carrega a bibliotecapatterns
, usada para cobrir áreas com padrões- separadas por vírgulas, bibliotecas podem ser carregadas com um só comando:
\usetikzlibrary{calc,patterns}
Linhas e texto
\coordinate (A) at (a, b)
– atribui o rótulo A ao ponto (a, b)\draw (A) -- (B) -- (C) -- (D)
– liga os pontos A, B, C e D em sequência por segmentos de retacycle
– colocado no fim de uma sequência de pontos, traça automaticamente o segmento que liga o último ao primeiro ponto de uma figura($(A)!0.5!(B)$)
– usado para criar o ponto médio do segmento AB. Se o valor for outro, como 0.3, por exemplo, indica que o ponto será criado 30% distante de A e 70% distante de B sobre o segmento AB.
Decorações
\fill
– irmão do comando\draw
, esse comando preenche áreas delimitadas por pontos. Observe que não precisamos decycle
no final.[gray!20]
– escolhe 20% do tom original de cinza (gray)[pattern=dots]
– preenche uma área com pontos. Necessita da bibliotecapatterns
para ser utilizado. Outros padrões serão vistos no primeiro exercício!
Exercícios
Vamos mudar um pouco o que fizemos:
- Troque o padrão de preenchimento
dots
por outros da seguinte lista:horizontal lines, vertical lines, north west lines, north east lines, grid, crosshatch, crosshatch dots, bricks, checkerboard.
Em nosso caso, escreva, por exemplo,[pattern=horizontal lines]
, e assim por diante. Qual você gostou mais? - Troque a expressão
(A)!0.5!(B)
usada para encontrar o ponto M para outros valores, como0.3
e0.9
. Troque em todos os pontos restantes N, O e P. O teorema continua válido? - Altere o ponto B para (2, 3) e execute o programa. O teorema permanece válido? Agora altere B para (6, 6). O teorema permaneceu válido?
- Elimine o ponto B da figura, ligando A diretamente a C. Faça as alterações necessárias no código para que você veja um triângulo externo e um triângulo interno formado pelos pontos médios do lados do triângulo externo. Qual é a relação entre esses dois triângulos?
DESAFIOS!
Qual é o quadrilátero que gera não um paralelogramo interno, mas um retângulo interno? E qual é o quadrilátero que gera um losango interno? E o que gera um quadrado interno? Teste alterando as coordenadas os pontos A, B, C e D.
E será que o teorema é válido para um pentágono
qualquer?