Calcular angulo entre dois pnotos

De modo geral, duas ferramentas essenciais a qualquer pessoa que tente fazer algo que precise de um mínimo de geometria analítica (ou seja, gráficos e coordenadas):

a) Um livro de matemática que ensine um pouquinho de trigonometria

b) Lápis, papel e uma régua.

Pode também arranjar papel milimetrado e um transferidor, mas isso já é opcional. Agora, fazer tudo no teclado (e perguntar tudo aqui no Orkut, aham, no Facebook) já não funciona muito bem.

[quote=DavidUser]P1(Ox, Oy) : primeiro ponto
P2(Ax, Ay) : segundo ponto

onde, explicitamente:
Ox : cordenada x do primeiro ponto
Oy : cordenada y do primeiro ponto
e
Ax : cordenada x do segundo ponto
Ay : cordenada y do segundo ponto

arco-tangente( Ay-Oy / Ax- Ox ) : angulo do eixo x ate a reta formada por P1 e P2.

arco-tangente( Ax-Ox / Ay-Oy ) : angulo do eixo y ate a reta formada por P1 e P2.
[/quote]

Eu disse que é o método “ingênuo” que se ensina em livros de matemática.
Na prática, em vez de fazer a divisão diretamente (o que dá problemas quando você tem um ângulo de 90 ou 270 graus - isso porque o denominador se torna zero), e ter de ficar corrigindo os ângulos somando ou subtraindo 180 graus, você usa o atan2, que já leva esses casos em conta.

legal isso entanglement!

Eu já recomendei, e volto a recomendar novamente:
http://www.pontov.com.br/site/arquitetura/54-matematica-e-fisica/132-o-uso-de-vetores-nos-jogos

Se estivesse usando a biblioteca, só faria:

aproveitando o topico sobre angulos,
usando o Graphics2D e rotate() como faço para rodar a uma imagem sem tirar ela do seu eixo original?
quando uso:

[code]if (circle.contains(new Point(x2, y2))) {

        double x3 = x1- x2;
        double y3 = y2 - y1;

        double theta = Math.atan2(y3, x3);
        g.rotate(theta, x1, x2);
        g.drawImage(tower, x1, x2, this);

}[/code]

a imagem sai do eixo dela, queria apenas mudar o angulo da imagem em relação ao um ponto.

Grato.

Use metade do tamanho da imagem no segundo e terceiros parâmetros do método rotate.
Esses parâmetros indicam em que ponto da imagem será o pivot de rotação, considerando o canto superior esquerdo como 0,0.

[quote=ViniGodoy]Use metade do tamanho da imagem no segundo e terceiros parâmetros do método rotate.
Esses parâmetros indicam em que ponto da imagem será o pivot de rotação, considerando o canto superior esquerdo como 0,0.
[/quote]

A imagem tem 32x32 pixels, ainda esta saindo do centro…

    if (circle.contains(new Point(x2, y2))) {  
        
                double x3 = x1- x2;  
                double y3 = y2 - y1;  
      
                double theta = Math.atan2(y3, x3);  
                g.rotate(theta, 16, 16);  
                g.drawImage(tower, x1, x2, this);  
    }  

[quote=JJjava][quote=ViniGodoy]Use metade do tamanho da imagem no segundo e terceiros parâmetros do método rotate.
Esses parâmetros indicam em que ponto da imagem será o pivot de rotação, considerando o canto superior esquerdo como 0,0.
[/quote]

A imagem tem 32x32 pixels, ainda esta saindo do centro…

[code]
if (circle.contains(new Point(x2, y2))) {

            double x3 = x1- x2;  
            double y3 = y2 - y1;  
  
            double theta = Math.atan2(y3, x3);  
            g.rotate(theta, 16, 16);  
            g.drawImage(tower, x1, x2, this);  
}  

[/code][/quote]

tentei tb o codigo abaixo e ainda sai do eixo :frowning:

 if (circle.contains(new Point(x2, y2))) {  
        
                double x3 = x1- x2;  
                double y3 = y2 - y1;  
      
                double theta = Math.atan2(y3, x3);  
                g.rotate(theta, x1+16,x2+ 16);  
                g.drawImage(tower, x1, x2, this);  
    }  

A sua imagem está desenhada no centro?

Outra coisa, o centro do objeto desenhado dentro da imagem, é o mesmo centro da imagem? Caso contrário, você tem que ver qual é o pixel do centro e indicar esse valor.

[quote=ViniGodoy]A sua imagem está desenhada no centro?

Outra coisa, o centro do objeto desenhado dentro da imagem, é o mesmo centro da imagem? Caso contrário, você tem que ver qual é o pixel do centro e indicar esse valor.[/quote]

não está no centro tela esta na posição (400,300) por exemplo

Onde foi que falei em tela?

Perguntei se o centro do desenho e o centro do arquivo de imagem coincidem.

Você tem que saber qual é o pixel do pivo de rotação. Abra sua imagem no paint, veja em torno de que pixel a figura deveria girar e coloque o valor desse pixel nos dois últimos parâmetros do método rotate.

Onde foi que falei em tela?

Perguntei se o centro do desenho e o centro do arquivo de imagem coincidem.

Você tem que saber qual é o pixel do pivo de rotação. Abra sua imagem no paint, veja em torno de que pixel a figura deveria girar e coloque o valor desse pixel nos dois últimos parâmetros do método rotate.[/quote]

eu quero rodar no meio da imagem a imagem tem 32x32 pixels, o pixel do centro nao seria (16,16) ?

Poste sua imagem.

[img]

http://img.ragnabr-files.net/storage/box121/x53176towerq.png
[/img]

[quote=JJjava][img]

http://img.ragnabr-files.net/storage/box121/x53176towerq.png
[/img][/quote]

upei en outro lugar

http://www.imagemhost.net/fd.png

O pivo não seria no centro do retângulo da parte de cima ( ponto 16,8 )?

a “face” da “torre” seria a ponta do triangulo.
o minha intenção aqui é q face da da torre acompanhe o inimigo comforme ele passe

Nesse caso, a ponta do triângulo é o pivo. Coloque as coordenadas dela.

Imagine o pixel do pivo como um “pino” em torno do qual a imagem gira.

[quote=ViniGodoy]Nesse caso, a ponta do triângulo é o pivo. Coloque as coordenadas dela.

Imagine o pixel do pivo como um “pino” em torno do qual a imagem gira.[/quote]
uhum, let’s try…

ta um pouco estranho mas esta melhor q estava…
acho q o maior problema é a volta da torre para a posição original quando o imimigo sai do raio ela volta direto…