O que é geometry arrow e como ele funciona na prática
Geometry arrow é uma ferramenta de desenho vetorial e construção geométrica que permite criar setas direcionadas a partir de segmentos de reta, com controle preciso sobre ponto de origem, ponto final, largura da ponta e ângulo de abertura. Diferente de shapes genéricos que depois precisam ser editados manualmente, geometry arrow calcula automaticamente os vértices da cabeça da seta com base no vetor direção do segmento.
Diretrizes de geometry arrow em softwares CAD e vetoriais
O princípio básico funciona assim: você define dois pontos, A e B. O vetor direção é (Bx - Ax, By - Ay). A partir desse vetor, o sistema calcula a perpendicular, converte para ângulo usando arctan2, e posiciona os três vértices da cabeça da seta no ponto final do segmento. A largura da ponta é usualmente uma fração do comprimento total do vetor, algo em torno de 1/5 a 1/3 do comprimento do segmento para manter proporções visuais aceitáveis. Na prática, a maioria dos softwares que implementam geometry arrow oferece três parâmetros ajustáveis: o ponto inicial, o ponto final e o tamanho da ponta. Alguns também permitem definir o ângulo da ponta separadamente, o que é útil quando você precisa de setas muito agudas ou muito abertas para diagramas específicos.
Eu já perdi tempo demais tentando alinhar setas em diagramas de forças em mecânica onde o ângulo padrão de 30 graus na ponta não funcionava porque as forças tinham magnitudes muito diferentes. O workaround que funcionei foi desvincular a proporção automática da ponta e fixar um valor absoluto em pixels, o que garantiu consistência visual entre setas de comprimentos distintos no mesmo desenho.
Como construir geometry arrow manualmente
Se o seu software não tem uma função nativa de geometry arrow, ou se você está programando uma implementação própria, o cálculo direto é simples. Suponha que você tenha o ponto inicial (x1, y1) e o ponto final (x2, y2), e deseja uma ponta com largura w e comprimento l medidos a partir do vértice final. O vetor direção é dx = x2 - x1 e dy = y2 - y1. O comprimento do segmento é length = sqrt(dx² + dy²). O ângulo em relação ao eixo X é angle = atan2(dy, dx). A perpendicular ao vetor direção, apontando para a esquerda, tem componentes (-sin(angle), cos(angle)). Os dois pontos laterais da base da ponta da seta ficam em:
Ponto esquerdo: (x2 + (-sin(angle)) * w/2, y2 + cos(angle) * w/2) Ponto direito: (x2 + sin(angle) * w/2, y2 - cos(angle) * w/2)
👉 Clique no botão abaixo para saber mais sobre o assunto!
O vértice da ponta é simplesmente (x2, y2), mas se você quiser que a ponta se estenda para trás ao longo do segmento por uma distância l, o ápice fica em (x2 - dx/length * l, y2 - dy/length * l). Assim, a cabeça da seta é um triângulo definido por três pontos, e o corpo é o segmento de reta entre (x1, y1) e a base desse triângulo. Esse cálculo manual resolve problemas que ferramentas automatizadas muitas vezes não tratam bem, como quando o ponto inicial e final são muito próximos e o comprimento do vetor tende a zero, gerando divisão por aproximadamente zero e resultados erráticos.
Pegadinhas e casos de canto que ninguém conta
O problema mais comum com geometry arrow é a degeneração quando os dois pontos coincidem. Se Ax = Bx e Ay = By, o vetor direção é nulo, o ângulo é indefinido, e qualquer cálculo de perpendicular quebra. Em softwares profissionais, isso geralmente resulta em uma seta com direção arbitrária ou em erro de renderização. A solução prática é detectar comprimento menor que uma tolerância epsilon, como 1e-6 unidades, e tratar esse caso como um ponto sem seta ou como um circle marker em vez disso. Outro problema frequente é a orientação em sistemas de coordenadas com eixo Y invertido, comuns em interfaces gráficas de tela. Em matemática pura, Y cresce para cima. Em pixel coordinates, Y cresce para baixo. Isso inverte o sinal do ângulo calculado por atan2, fazendo com que a seta aponte para o lado errado da perpendicular. Se sua implementação parecer espelhada horizontalmente, verifique primeiro se o sistema de coordenadas do seu canvas inverte Y.
Um caso mais sutil envolve polígonos orientados. Quando você usa geometry arrow para indicar a direção de arestas de um polígono, a consistência da orientação (horária ou anti-horária) importa para cálculos posteriores como produto vetorial e teste de ponto dentro do polígono. Setas mal orientadas em diagramas de Voronoi ou em malhas triangulares já me causaram bugs difíceis de rastrear porque a lógica geométrica downstream assumia orientação consistente.
Ferramentas que implementam geometry arrow
GeoGebra possui recurso de seta direcionada nativo na versão Geometria, onde você seleciona a ferramenta seta e clica nos dois pontos. O Vectori é outra opção popular para construções didáticas. Para desenvolvimento, bibliotecas como D3.js oferecem arrows via marker definitions no SVG, enquanto Canvas 2D exige implementação manual conforme descrito acima. Em Python, a biblioteca matplotlib permite adicionar arrows com a função annotate ou arrow, e a library manim, usada para produções matemáticas em vídeo, tem classes dedicadas para arrows com controle fino de geometria.
Quando geometry arrow não é a melhor solução
Se você precisa de setas curvas, como arcos que seguem trajetórias não-lineares, geometry arrow baseado em segmento reto não serve. Nesse caso, bezier curves com marcadores de ponta são mais adequados. Também não recomendo geometry arrow para desenho em tempo real em canvas de alta performance com milhares de setas simultâneas, pois o cálculo trigonométrico por frame pode saturar. Nesse cenário, pré-computar os vértices das setas e reutilizá-los em buffers geometricos é significativamente mais eficiente. Para quem busca uma ferramenta pronta para download e uso imediato em projetos educacionais, o GeoGebra Geometry é gratuito e disponível em geogebra.org/geometry. Ele já inclui geometry arrow com todos os parâmetros ajustáveis pela interface.