Primeiramente olá…
Estou trabalahndo em uma simulação computacional onde podemos visualizar a emergência do comportamento global de uma sociedade de seres em função das restrições nos comportamentos locais.
A simulação já está funcionando, estou representando os seres em questão através de pontos vermelhos que se deslocam pela tela. Para que possamos melhor visualizar a direção que cada um dos agentes/seres toma em seu deslocamento pensei em representá-los através de triângulos isóceles que apontariam na mesma direção do vetor de deslocamento do agente/ser.
A seguinte imagem tesnta ilustrar o que procuro:
Na imagem podemos ver um sistema de coordenadas no qual está situado um ponto PM que representa o ponto em que o ser/agente está localizado. Este ser se move na direção do vetor também representado na figura. Minha dúvia é: Como calcular os pontos A, B e C em função do ponto PM e do vetor, de modo que eu possa desenhar um triângulo para representar meu agente/ser…O triângulo teria que possuir uma ponta evidente (a que estaria apontando na direção do vetor).Poderia ser algo como 70,70 e 40 graus, por exemplo…
Fiz da seguinte forma:
Supondo que PM deve ficar “no meio” do triangulo.
Seja v=(a,b) o tal vetor, e alfa o angulo CAB=CBA.
Calcule um vetor w=(c,d), ortogonal a v e de norma=1. (a.c+b.d=0 e c^2+d^2=1)
Agora é encontrado k, a metade do lado AB, em função do ângulo alfa e da altura h (constante, usei o valor 10) do triangulo: k=(2.h)/tg(alfa)
Assim:
C=PM+1/2.v
A=PM-1/2.v+k.w
B=PM-1/2.v-k.w
Para calcular numericamente o vetor w (ortogonal a v) baseado nesse raciocínio, fiz algumas manipulações e cheguei ao seguinte:
d = sqrt( a^2 / (a^2 + b^2) )
c = -b.d/a
Tendo os vetores v e w, consigo calcular os pontos A,B e C. Calculando esses pontos, posso plotar o triângulo usando o método:
fillPolygon(int[] xPoints, int[] yPoints, int nPoints) da classe java.awt.Graphics.
Todavia, o que consigo na tela, são uma série de riscos que não lembram em nada triângulos. Queria saber se alguém consegue ver um possível erro no meu raciocínio. Sei que tem um pessoal que trabalha direto com desenvolvimento de jogos em Java e, portanto, com manipulação “pancada” de java2D. Se puderem me dar uma mão nisso.