Identificar ângulo

pessoal, como posso identificar o ângulo de um triângulo retângulo impresso em uma imagem digital??

O ângulo é 90º :stuck_out_tongue:

Sério, por que é que você precisa disso?

Seu problema são dois. hehehe

Passo 1:

Ler a imagem e conseguir transformar as hastes do triângulo em vetores. (bem difícil, dependendo da imagem).

Tem algum exemplo de imagem pra postar aqui?

Passo 2:

Identificar o ângulo formado entre dois vetores (moleza).

[quote=entanglement]O ângulo é 90º :stuck_out_tongue:

Sério, por que é que você precisa disso?[/quote]

putz… falei bobagem, hehehehe
na verdade não é só triangulo retangulo, é apenas um triangulo… e tenho que identificar o angulo do vértice dele… só que ele esta impresso na imagem, tenho que fazer a leitura da imagem e depois dizer o angulo do seu vértice…

[quote=Maiquelnet][quote=entanglement]O ângulo é 90º :stuck_out_tongue:

Sério, por que é que você precisa disso?[/quote]

putz… falei bobagem, hehehehe
na verdade não é só triangulo retangulo, é apenas um triangulo… e tenho que identificar o angulo do vértice dele… só que ele esta impresso na imagem, tenho que fazer a leitura da imagem e depois dizer o angulo do seu vértice…[/quote]

Um triângulo tem 3 ângulos e 3 vértices. De qualquer maneira, seus problemas são:

  • Achar as linhas na imagem
  • Identificar os polígonos
  • Determinar os ângulos.

Dificilmente haverá apenas um triângulo na sua imagem. O mais chato é que você tem o seguinte problema: se a aresta do seu polígono for muito grossa, você tem ainda outro problema.

[quote=pablosaraiva]Seu problema são dois. hehehe

Passo 1:

Ler a imagem e conseguir transformar as hastes do triângulo em vetores. (bem difícil, dependendo da imagem).

Tem algum exemplo de imagem pra postar aqui?

Passo 2:

Identificar o ângulo formado entre dois vetores (moleza).[/quote]

aqui tem um exemplo da imagem, só sem o valores…

só não entendei a parte que voce falou de angulo de dois vetores???

[quote=entanglement]
Um triângulo tem 3 ângulos e 3 vértices. De qualquer maneira, seus problemas são:

  • Achar as linhas na imagem
  • Identificar os polígonos
  • Determinar os ângulos.

Dificilmente haverá apenas um triângulo na sua imagem. O mais chato é que você tem o seguinte problema: se a aresta do seu polígono for muito grossa, você tem ainda outro problema. [/quote]

a imagem, terá 1 pixel de expessura…

para achar as linhas… já consegui, elaborei um método, com o get pixel… e ele joga os valores pra dentro de uma matriz[][]…
os poligonos que não sei como identificar…
e tb determinar o ângulo tb não sei…

Aí você precisa de um pouco de trigonometria (senos e cosenos). Você aprendeu isso no ensino médio?

Dica: o Java já tem um método que lhe permite determinar o ângulo, a partir de coordenadas. O método é “Math.atan2 (double y, double x)”.

Se for uma imagem como essa, é bem mais fácil pedir pro usuário digitar o tamanho dos lados e o programa retornar o valor de X.

Caso você realmente tenha que achar o triângulo na imagem pra fazer o cálculo, procure sobre visão computacional e detecção de bordas.

Vou ver se penso em alguma coisa e posto aqui mais tarde.

Boa sorte.

Dê uma olhada.


class Ponto {
    public double x;
    public double y;
    public Ponto (double x, double y) { this.x = x; this.y = y; }
}

class Angulos {
 
    public static double calcularAngulo (Ponto p1, Ponto p2, Ponto p3) {
        Ponto p1t = new Ponto (p1.x - p2.x, p1.y - p2.y);
        Ponto p3t = new Ponto (p3.x - p2.x, p3.y - p2.y);
	double alfa = Math.atan2 (p1t.y, p1t.x);
        double beta = Math.atan2 (p3t.y, p3t.x);
        return alfa - beta;
    }
    public static double[] calcularAngulos (Ponto... pontos) {
        if (pontos.length < 3) {
            return new double[0];
        }
        double[] angulos = new double[pontos.length];
        int i;
        for (i = 0; i < pontos.length - 2; ++i) {
            angulos[i] = calcularAngulo (pontos[i], pontos[i+1], pontos[i+2]);
        }
        angulos[i] = calcularAngulo (pontos[i], pontos[i+1], pontos[0]);
        i++;
        angulos[i] = calcularAngulo (pontos[i], pontos[0], pontos[1]);
        return angulos;
    }

    public static void main (String[] args) {
        double[] angulos = calcularAngulos (new Ponto (0, 0), new Ponto (1, 0), new Ponto (0.5, Math.sqrt 

(3.0) / 2));
        for (int i = 0; i < angulos.length; ++i) {
             System.out.printf ("%.2f graus %n", Math.toDegrees (angulos[i]));
        }
    }
}

O código que postei requer que você tenha determinado as coordenadas dos vértices (no exemplo dado, um triângulo equilátero. ). Como é que você determina as coordenadas dos vértices fica por sua conta.

[quote=entanglement]Aí você precisa de um pouco de trigonometria (senos e cosenos). Você aprendeu isso no ensino médio?

Dica: o Java já tem um método que lhe permite determinar o ângulo, a partir de coordenadas. O método é “Math.atan2 (double y, double x)”. [/quote]

consegui fazer o seguinte:
na imagem, consegui identificar as coordenadas x,y das extremidades do triangulo (os vértices)
assim: jogo o valor da imagem em uma matriz, e procuro o ponto mais extremo dele… então assim eu consigo ter acesso aos pontos, ou seja, os valor da linha e coluna em X e Y, terei 3 pontos. Vertice1 [x][y], vertice2[x][y] e vertice3[x][y];

vou tentar com seu código, pra ver se funciona e depois posto aqui…

[quote=entanglement]Dê uma olhada.

[code]

class Ponto {
public double x;
public double y;
public Ponto (double x, double y) { this.x = x; this.y = y; }
}

class Angulos {

public static double calcularAngulo (Ponto p1, Ponto p2, Ponto p3) {
    Ponto p1t = new Ponto (p1.x - p2.x, p1.y - p2.y);
    Ponto p3t = new Ponto (p3.x - p2.x, p3.y - p2.y);
double alfa = Math.atan2 (p1t.y, p1t.x);
    double beta = Math.atan2 (p3t.y, p3t.x);
    return alfa - beta;
}
public static double[] calcularAngulos (Ponto... pontos) {
    if (pontos.length < 3) {
        return new double[0];
    }
    double[] angulos = new double[pontos.length];
    int i;
    for (i = 0; i < pontos.length - 2; ++i) {
        angulos[i] = calcularAngulo (pontos[i], pontos[i+1], pontos[i+2]);
    }
    angulos[i] = calcularAngulo (pontos[i], pontos[i+1], pontos[0]);
    i++;
    angulos[i] = calcularAngulo (pontos[i], pontos[0], pontos[1]);
    return angulos;
}

public static void main (String[] args) {
    double[] angulos = calcularAngulos (new Ponto (0, 0), new Ponto (1, 0), new Ponto (0.5, Math.sqrt 

(3.0) / 2));
for (int i = 0; i < angulos.length; ++i) {
System.out.printf ("%.2f graus %n", Math.toDegrees (angulos[i]));
}
}
}
[/code][/quote]

entanglement, muito obrigado mesmo cara… vo ter que citar teu nome nos agradecimentos, rsrsrs
só desculpa minha burrice, mas preciso entender bem seu código.
Na linha:

 double[] angulos = calcularAngulos (new Ponto (0, 0), new Ponto (1, 0), new Ponto (0.5, Math.sqrt (3.0) / 2));

é onde eu devo inserir as coordenadas XY dos vérsices 1 e 2?
Não entendi, o seguinte, tenho 3 coordenadas XY, cada uma é um vértice.
Especificamente, onde insiro esses valores?