segunda-feira, 30 de maio de 2011

Sistemas de coordenadas no TikZ

Sistemas de coordenadas no TikZ

O TikZ trabalha com dois sistemas de coordenadas: retangulares e polares. Abordaremos aqui algumas formas de se desenhar figuras no TikZ usando essas coordenadas na sua posição absoluta e relativa.

Coordenadas Retangulares

Um sistema de coordenadas retangulares ou coordenadas cartesianas no plano consiste de um par ordenado (x,y) onde x é a entrada referente ao eixo horizontal e y é a entrada referente ao eixo vertical do plano cartesiano.

Plano cartesiano
No TikZ vamos interpretar em primeiro momento como coordenadas retangulares em posição absoluta, visto que depois reveremos um pequena variação deste item.
Em TikZ as coordenadas retangulares são expressas da mesma forma como a conhecemos nas notações matemáticas, entre parênteses: (x,y)
As entradas x e y aceitam qualquer valor real.

Obs: Por padrão a unidade de medida do TikZ é cm. Mas o TikZ aceita mm, pt (ponto) 1cm = 28.45 pt, in (polegada) 1in = 25.4 mm, etc.

Vejamos alguns exemplos:
Exemplo 1: ponto
Vamos desenhar um ponto na coordenada (2,1), para isso digite:
\fill[blue] (2,1) circle (1mm) node[above right] {$P_1$};

O trecho node[above right] {$P_1$} é para inserir uma legenda no ponto.
Ponto em coord. retangular

Note que o ponto de origem no sistema de coordenadas retangulares em posição absoluta é o ponto (0,0).

Exemplo 2: reta
Para desenhar uma reta precisamos de pelo menos dois pontos.
\draw[->,blue] (0,0) -- (2,1);

Uma reta saindo da origem e indo até o ponto (2,1).
Reta em coord. retangular

Exemplo 3: retângulo
Veja no código a seguir que as coordenadas de um retângulo são dadas pelos pontos P1 e P2.
\draw[blue] (1,1) rectangle (4,3);
Retângulo em coord. retangular

Coordenadas Relativas

As coordenadas relativas funcionam da seguinte forma: dado um ponto fixo (a,b) em coordenadas absolutas o ponto (x,y), em coordenadas relativas, é dado por:

ou (x,y)=(a,b)+(x1,y1).
Ou seja, (a,b) é a nova origem no sistema de coordenadas relativas e (x1,y1) é o ponto que deve ser "somado" à nova origem para se obter o novo ponto (x,y).
Coordenadas relativas

Exemplo 4: ponto

\fill (2,1) circle (1mm) node[below left] {O};
\fill[blue] (2,1)+(1,1) circle (1mm) node[above right] {$P_1$};


Ponto em coord. relativa

Repare que o ponto (2,1) é a nova origem e (1,1) é o ponto que somado à nova origem resulta no ponto (3,2).

Exemplo 5: reta
Escreva o código a seguir:
\draw[->,blue] (2,1) -- +(2,1);

Comparando com a reta desenhada anteriormente a única diferença é que agora a nova origem é o ponto (2,1) e a reta vai até o ponto (4,2). Ou seja, o comprimento da reta é o mesmo, porém a reta se deslocou duas unidades para a direita e uma unidade para cima.
Reta em coord. relativa

Este recurso é bastante interessante quando se deseja desenhar a mesma figura em várias posições diferentes. Veja um exemplo:
\draw[->,blue] (2,1) -- +(2,1);
\draw[->,blue] (3,3) -- +(2,1);
\draw[->,blue] (1,4) -- +(2,1);

Retas em coord. relativa


Exemplo 6: retângulo
Vamos desenhar o mesmo retângulo da figura anterior, só que agora nos preocuparemos com seu comprimento e sua altura.
\draw[blue] (1,1) rectangle +(3,2);

O ponto inicial é o mesmo P1 dado por (1,1) só que agora o comprimento é 3 unidades e a altura é 2 unidades.
Retângulo em coord. relativa

Diferença entre + e ++

Em coordenadas relativas podemos usar os símbolos + e ++. A diferença é que enquanto ++ atualiza as coordenadas em relação ao último ponto, o + não atualiza, permanecendo sempre em relação ao ponto inicial da figura.

Veja na figura a seguir que com o uso de ++ a coordenada é sempre relativa ao último ponto da figura.
\draw[->,blue] (2,1) -- ++(1,0) -- ++(0,-1) -- ++(-1,0) -- ++(0,1);
Figura desenhada com ++
No primeiro quadro a figura começa tendo P1 como origem e P2 como ponto final da linha;
No segundo quadro a origem é P2 e o ponto final é P3;
No terceiro quadro a origem é P3 e o ponto final é P4;
E no quarto quadro a origem é P4 e o ponto final é P1.

Na figura seguinte o uso de + tem sempre o ponto (2,1) como ponto de referência.
\draw[->,blue] (2,1) -- +(1,0) -- +(0,-1) -- +(-1,0) -- +(0,1);
Figura desenhada com +
O ponto P1 em (2,1) permanece fixo e os demais pontos têm sempre o ponto P1 como origem.
Coordenadas Polares

O sistema de coordenadas polares consiste de uma distância (ou raio) e da medida de um ângulo em relação a um ponto fixo O chamado de pólo e uma semi-reta fixa chamada de eixo polar.
Coordenadas polares
O ponto P fica bem determinado através do par ordenado (\alpha:r), onde \alpha é a medida (em graus) do ângulo orientado AOP, e r é a distância (ou raio) entre a origem e o ponto P. Note que o ângulo segue o sentido anti-horário em relação ao ponto O.

Veja a seguir como é uma grade em coordenadas polares.
Grade em coordenadas polares

Vejamos alguns exemplos de retas desenhadas em coordenadas polares:

Exemplos 7 e 8
\draw (0,0) -- ++(45:2);

\draw (0,0) -- ++(135:3);



Reta no primeiro quadrante

Reta no segundo quadrante
Exemplos 9 e 10
\draw (0,0) -- ++(210:2);

\draw (0,0) -- ++(315:3);



Reta no terceiro quadrante

Reta no quarto quadrante
Para o último exemplo podemos escrever \draw (0,0) -- ++(-45:3); ou seja, usando o sinal de - o ângulo muda para o sentido horário.

Exemplos 11: Combinando coordenadas relativas e coordenadas polares
Para que a origem da reta fique num ponto diferente de (0,0) precisamos combinar coordenadas relativas e coordenadas polares, para isso digite:
\draw (2,1) -- ++(45:2);
Reta em coordenadas polares com origem num outro ponto.
A reta inicia-se em (2,1) e possui um ângulo de 45º e 2 cm de comprimento.

Exemplos 12 e 13: Losango e Círculo com raio
Um exemplo ideal para a utilização desta técnica é quando se deseja desenhar um losango de 3 cm de comprimento e inclinação de 60º.
\draw[fill=yellow] (0,0) -- (3,0) -- ++(60:2) -- ++(-3,0) -- cycle;

Ou um círculo de raio unitário com indicação do raio.

\begin{tikzpicture}[>=latex]
 \draw (2,1) circle (1);
 \fill (2,1) circle (1pt);
 \draw[->] (2,1) -- ++(45:1);
\end{tikzpicture}


Note que o círculo está fora da origem.


Losango

Círculo com raio

Operações algébricas com coordenadas

O TikZ calcula valores diretamente na entrada das coordenadas graças à 'biblioteca' calc.

Exemplo 14: Soma e subtração de coordenadas
\fill[red] (2,1) circle (2pt);
\fill[blue] (2+1,1+1) circle (2pt);
\fill[blue] (2-1,1-1) circle (2pt);


O ponto P2 foi obtido pela soma de 1 unidade em cada uma das entradas da coordenada. E o ponto P3 pela subtração de 1 unidade em cada uma das entradas.
Soma e subtração de coordenadas
Exemplo 15: Multiplicação e divisão de coordenadas
\fill[red] (2,1) circle (2pt);
\fill[blue] (2*2,1*2) circle (2pt);
\fill[blue] (2/2,1/2) circle (2pt);


O ponto P2 foi obtido pela multiplicação por 2 em cada uma das entradas da coordenada, resultando assim no ponto (4,2). E o ponto P3 pela divisão por 2 em cada uma das entradas, resultando no ponto (1,0.5).
Multiplicação e divisão de coordenadas

Exemplo 16: Medidas no losango

\begin{tikzpicture}[>=latex]
 \draw[fill=yellow] (0,0) -- (3,0) -- ++(60:2) -- ++(-3,0) -- cycle;
 \draw[->] (0,0) ++(.5,0) arc (0:60:.5);
 \node[below] at (3/2,0) {$3$};
 \node at (45/2:1) {$60^\circ$};
\end{tikzpicture}


Repare nas linhas a seguir o uso do operador de divisão.

\node[below] at (3/2,0) {$3$};
\node at (45/2:1) {$60^\circ$};

Losango com medidas

Nomeando coordenadas

Um recurso muito interessante no TikZ é a possibilidade de usar pontos nomeados. Para nomear uma coordenada escreva:
\coordinate (A) at (0,0);
\coordinate (B) at (2,1);


Agora temos o ponto A na coordenada (0,0) e o ponto B na coordenada (2,1). Agora podemos desenhar uma reta do ponto A ao ponto B.
\draw (A) -- (B);
Coordenadas nomeadas
Veja o código completo:
\begin{tikzpicture}
 \coordinate[label=left:A] (A) at (0,0);
 \coordinate[label=right:B] (B) at (2,1);
 \draw (A) -- (B);
\end{tikzpicture}


As opções label=left:A e label=right:B colocam uma legenda a esquerda de A e a direita de B, respectivamente.
Também é possível desenhar um ponto e nomeá-lo logo na sequência. Digite:
\draw (A) -- (B) -- (4,0) coordinate[label=right:C] (C);

Acabamos de nomear o ponto C na coordenada (4,0) diretamente no desenho da reta.
Agora podemos fechar o triângulo.
\draw (A) -- (C); 

Veja o código completo:
\begin{tikzpicture}
 \coordinate[label=left:A] (A) at (0,0);
 \coordinate[label=above:B] (B) at (2,1);
 \draw (A) -- (B) -- (4,0) coordinate[label=right:C] (C);
 \draw (A) -- (C);
\end{tikzpicture}


Coordenadas nomeadas

Exemplo 17: Reta paralela com comprimento definido
No código a seguir vamos desenhar uma reta paralela aos pontos A e B começando por C, que está a uma distância de 3mm de A, e com comprimento de 1cm.

\begin{tikzpicture}
 \coordinate[label=left:A] (A) at (1,1);
 \coordinate[label=right:B] (B) at (2,1);
 \fill[blue] (A) circle (1pt);
 \fill[blue] (B) circle (1pt);
 \draw[->,red] (A)++(0,3mm) coordinate[label=C] (C) -- ++(1,0);
 \fill[red] (C) circle (1pt);
\end{tikzpicture}


Observe na linha \draw[->,red] (A)++(0,3mm) coordinate[label=C] (C) -- ++(1,0); que o ponto (A)++(0,3mm) é chamado de C. Somente dessa forma que ele pode ser computado para a coordenada onde se encontra, e a partir dai ser usado como ponto C.
Reta paralela com comprimento definido

Exemplo 18
É claro que podemos usar o mesmo ponto várias vezes.

\begin{tikzpicture}
 \coordinate (A) at (0,0);
 \coordinate (B) at (2,1);
%pontos
 \fill[blue] (A) circle (1pt) (B) circle (1pt);
%legendas
 \node[left] at (A) {A};
 \node[right] at (B) {B};
%retangulo
 \draw[fill=yellow] (A) rectangle (B);
%reta
 \draw (A) -- (B);
\end{tikzpicture}

Exemplo de pontos nomeados

Este artigo também está disponível no scribd.

Palavras-chave: TikZ, figuras, coordenadas cartesianas, coordenadas retangulares, coordenadas relativas, coordenadas polares, posição absoluta, posição relativa, nomeando dando nome a coordenadas no TikZ