Protótipo do Compasso


Devido às suas características geométricas, o compasso pode ser modelado por um triângulo isósceles, do qual é omitida a base como ilustrado na figura 1. Desta forma, a implementação das operações do compasso se baseia na manipulação algébrica dos vértices deste triângulo.

O protótipo possui uma representação gráfica simplificada do instrumento, diferentemente da versão final, na qual essa representação terá uma aparência realística.

 

 Figura 1 - Modelo abstrato do compasso 

Segue-se a descrição dos principais problemas referentes à implementação do protótipo e suas respectivas soluções.

Seleção do Instrumento

Quando ocorre um clique do mouse é preciso determinar se o mesmo foi sobre o instrumento, para isso determina-se a distância d entre o ponto onde ocorreu o evento e as retas do modelo do compasso, como é possível ver na figura 1. Se esta distância for menor que a largura l do braço e o ponto estiver do lado externo (conforme a figura), o clique foi sobre o instrumento. Além disso, a reta com a qual o cursor está interagindo é a que está mais próxima do ponto.

Figura 2 - Clique sobre o compasso

 Na versão final, a área sensível será adaptada ao desenho do compasso.

Áreas Sensíveis

Conforme a descrição preliminar da interface, o compasso possui quatro áreas sensíveis, representadas na figura 3: (1) braço da ponta seca, (2) braço da ponta de grafite, (3) ponta do grafite e (4) topo. Cada área possuí comportamento diferente na interação com o cursor.

 Figura 3 - Áreas sensíveis do compasso 

Para a determinação da área selecionada, primeiro é preciso saber se o clique foi no instrumento. Em seguida, se a distância entre o ponto correspondente ao clique do mouse e o vértice do topo for menor que um valor r, a área selecionada é a área (4). Caso contrário, verifica-se qual reta está interagindo com o cursor, se for a reta do braço da ponta seca, a área selecionada é (1). Se for a reta do braço da ponta de grafite, calcula-se a distância entre ponto do clique e o vértice da ponta de grafite. Caso essa distância for menor que o valor r, a área selecionada é a área (3), caso contrário, é a área (2).

Translação

O compasso é transladado pela área de desenho quando é arrastado pelo braço da ponta seca (área 1). A cada movimentação do cursor é calculado um vetor deslocamento cujas coordenadas são obtidas a partir dos vértices do modelo, representados na figura 4:

Figura 4 - Coordenadas dos
vértices do modelo

Os novos vértices do modelo são obtidos através da soma dos vértices antigos com o vetor deslocamento.

Rotação

A rotação ocorre quando o compasso é arrastado pelo topo (área 4). O ângulo de rotação é calculado através do produto escalar entre os vetores u e v que descrevem o movimento relativo do cursor em relação ao vértice da ponta seca:

 

A partir do ângulo obtido, calcula-se as novas coordenadas aplicando-se a matriz de rotação aos vértices do modelo:

 

Regulagem da abertura

A alteração da abertura do compasso ocorre quando o braço da ponta de grafite (área 2), é arrastado até que a abertura desejada seja obtida.

Esta função está implementada no protótipo da seguinte forma: Primeiro calcula-se o vetor projeção do vetor deslocamento na direção da base do triângulo isósceles, como mostrado na figura 5. Em seguida, calcula-se o vetor resultante da soma do vetor da base com o vetor projeção, obtendo-se assim o vetor referente à nova base.

  Figura 5 - Abertura do compasso

Por fim, as novas coordenadas do modelo são calculadas através da construção do triângulo isósceles (figura 6), baseada no comprimento dos braços do compasso.

 Figura 6 - Construção do triângulo isósceles 

Elementos de Desenho

O protótipo permite o traçado de arcos e marcação de pontos na área de desenho. Para criar arcos basta arrastar o compasso pela ponta de grafite e para marcar pontos, basta clicar fora do compasso.

Os pontos e arcos são elementos de desenho armazenados em listas ligadas que são estruturas de dados dinâmicas. Assim, cada elemento é um objeto na memória e possui uma instância do próximo elemento da lista.

Ocorrendo translação, rotação ou abertura do compasso, um novo arco deve ser criado na memória na próxima vez que a ponta de grafite for arrastada.

Um arco instanciado possui inicialmente um ângulo de varredura igual a zero e um ângulo que marca o início do arco igual ao ângulo formado pela base do modelo de compasso e a horizontal, conforme ilustrado na figura 7.

 Figura 7 - Ângulos inicial e de varredura de um arco 

Quando o compasso é arrastado pela ponta de grafite, o mesmo sofre rotação e o ângulo de varredura do arco corrente é acrescido do ângulo da rotação executada. Rotações no sentido anti-horário resultam em ângulos positivos, enquanto que as rotações no sentido horário resultam em ângulos negativos.

Ajuste com Pontos

Quando a ponta seca ou a ponta de grafite passa sobre pontos pré-desenhados, os mesmos se destacam, indicando a intersecção com as pontas (no protótipo os pontos são representados por círculos).

Quando o botão do mouse é liberado, se um ponto fizer intersecção com a ponta seca, então o compasso será deslocado de forma que a posição da ponta coincida com o centro do ponto. De maneira semelhante, se um ponto fizer intersecção com a ponta de grafite, a abertura do compasso se ajustará para que essa ponta fique sobre o centro do ponto.

No primeiro caso, utiliza-se um vetor deslocamento para calcular as novas coordenadas do modelo. No segundo, a partir das coordenadas da ponta seca e do ponto em questão, obtém-se uma nova base para o triângulo isósceles do modelo, bastando utilizar a construção descrita anteriormente para obter as novas coordenadas.

Topo