Protótipo do Esquadro


Para a implementação do protótipo do esquadro foi adotada uma representação simplificada do mesmo, constituída de um triângulo retângulo desenhado sobre o fundo de uma janela de um aplicativo, representado internamente pelas coordenadas de seus vértices. Como os dois esquadros da interface não diferem quanto às características avaliadas (movimentação e posicionamento), foi implementado um único esquadro, deixando para uma próxima etapa a avaliação da interação entre os dois.

Seleção do Esquadro

Um problema inicial que surgiu na implementação do esquadro foi determinar se um clique do mouse ocorrera dentro ou fora da área compreendida pelo instrumento. Foram encontradas as seguintes soluções para o problema:

Solução 1 – Comparação através de geometria analítica

A partir da comparação entre as coordenadas do clique do mouse e as equações dos três segmentos de reta que formam a representação triangular do esquadro no sistema de coordenadas do Java 2D, no qual o eixo das abscissas cresce da esquerda para a direita e o eixo das ordenadas, de cima para baixo, com origem no extremo superior esquerdo da janela. Essa solução apresenta a desvantagem de necessitar um número grande de cálculos para a determinação dos parâmetros das equações das retas e comparações de domínios para se obter os segmentos, além das comparações com o referido ponto.

Solução 2 – Algoritmo gráfico

A partir do ponto onde ocorreu o clique, traça-se uma semi-reta em qualquer direção de forma que a mesma corte o polígono convexo, no caso um triângulo. Se o número de intersecções for par, o ponto não pertence ao triângulo e se for ímpar, pertence. O problema dessa solução está nas exceções que devem ser consideradas, como o caso da semi-reta passando exatamente por um vértice do triângulo (figura 1).

Figura 1 - Exceção do algoritmo gráfico

Solução 3 – Cálculo de áreas

A partir do ponto P onde ocorreu o clique e dos vértices ABC do triângulo constroem-se três triângulos PAB, PAC e PBC. Compara-se a soma das áreas dos três triângulos com a área do triângulo original ABC (figura 2). Se a área for igual, o ponto está dentro; se for maior, o ponto está fora. As áreas podem ser obtidas fazendo-se o determinante dos vértices de cada triângulo e dividindo-se o valor obtido por dois. A desvantagem dessa solução é o cálculo de quatro áreas para cada clique do mouse.

Figura 2 - Algoritmos da soma das áreas

Solução 4 – Produto vetorial

O problema pode ser reduzido a determinar de qual lado de uma reta um ponto está, uma vez adotado um sentido definido por um vetor diretor da reta. Conhecidos dois pontos da reta (A e B) e adotando um sistema de coordenadas xyz, o sinal da coordenada z do produto vetorial  indica de que lado da reta o ponto está, conforme a figura 3.

Figura 3 - Algoritmo do produto vetorial

 Adotando o sentido do vetor saindo da folha como positivo, o ponto P estará à direita do vetor AB quando a coordenada z for maior que zero e à sua esquerda caso esta coordenada seja negativa.

Voltando para o problema original, para determinar se o clique do mouse foi no interior do esquadro basta determinar se o ponto está à direita dos vetores diretores das retas no sentido horário, ou à esquerda no sentido anti-horário (figura 4).

Figura 4 - Algoritmo do produto vetorial

 A vantagem desta solução é que ela necessita apenas do cálculo da coordenada z de três produtos vetoriais, o que pode ser conseguido da seguinte forma:

  ;  

Como essa solução apresenta um menor número de cálculos para resolver o problema e não apresenta exceções, ela foi implementada no código do protótipo.

 Movimentação do Esquadro

A movimentação do esquadro é constituída dos movimentos de translação e rotação combinados. Essa combinação de movimentos depende da trajetória do cursor, como ilustrado abaixo:

 

 

 

 

Figura 5 - Análise vetorial da trajetória do cursor

Quando o botão esquerdo do mouse é pressionado sobre o esquadro, são armazenadas as coordenadas (xo, yo) do cursor. A cada instante em que o esquadro é movido com o botão pressionado, são computadas as coordenadas (x, y). A partir das coordenadas do clique inicial e da posição atual, são obtidos os vetores  e  que determinam as posições inicial e final do cursor em relação ao baricentro. O vetor  possui a mesma norma do vetor , porém possui direção e sentido do vetor . Com esses vetores calculam-se o ângulo de rotação q e o vetor deslocamento , que equivalem, respectivamente, ao quanto o esquadro deverá ser rotacionado e transladado.

Quando o esquadro é arrastado por um ponto próximo do centro, seu movimento torna-se instável devido ao aumento dos deslocamentos angulares. No entanto, na versão final o esquadro será representado como o instrumento real que possui um buraco no interior, evitando assim esse problema.

Baricentro

Para auxiliar na visualização dos movimentos do esquadro, o baricentro do triângulo é representado por um círculo sobre o desenho do triângulo. Além disso, as coordenadas do baricentro servem de origem no cálculo de vetores relacionados à movimentação do esquadro.

Para uma posição arbitrária do triângulo, o baricentro é calculado vetorialmente da seguinte forma:

Figura 6 - Obtenção do baricentro

Rotação

O ângulo de rotação é obtido através do produto escalar entre o vetor formado pelas coordenadas do clique do mouse e o baricentro do triângulo e o vetor formado pelas coordenadas do cursor e o baricentro (a posição do cursor é obtida instantaneamente enquanto o usuário arrasta o esquadro), como mostra a figura 7.

Figura 7 - Ângulo de rotação


Determinado o ângulo, aplica-se a matriz de rotação às coordenadas dos vértices do esquadro. A matriz de rotação é obtida da seguinte forma:

Figura 8 - Obtenção da matriz de rotação

Translação

Como mencionado no item 3.2, o esquadro descreve um movimento de translação combinado com um movimento de rotação. A partir da análise vetorial da trajetória do cursor obtém-se o vetor deslocamento . Assim, as novas coordenadas do esquadro são calculadas adicionando-se esse vetor a cada um dos vértices.

Vínculos

Como definido na descrição da interface, quando uma borda do esquadro faz intersecção com um ou dois pontos, estes se destacam indicando a existência ou a possibilidade de criação de vínculos. Vínculos modificam o comportamento do esquadro quanto à sua movimentação: vínculo simples (um ponto) faz com que o centro do ponto se torne o centro de rotação do esquadro, enquanto que o vínculo duplo (dois pontos) restringe a translação na direção da reta que passa pelos pontos.

No caso do vínculo duplo, calcula-se o vetor projeção do vetor deslocamento na direção dos dois pontos (figura 9). Somando-se esse vetor projeção às coordenadas dos vértices, obtém-se a nova posição do esquadro. 

Figura 9 - Projeção do deslocamento na
 direção dos pontos

Quando o botão do mouse é liberado e existindo intersecção entre pontos da área de desenho e uma das bordas do esquadro, este é ajustado aos pontos (figura 10) da seguinte forma: ocorre translação para que a borda se alinhe com o centro do primeiro ponto vinculado e rotação para que a mesma se alinhe ao segundo, caso o vínculo seja duplo.

Figura 10 - Ajuste do esquadro
aos pontos vinculados

Topo