Identificar ângulo

12 respostas
M

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

12 Respostas

E

O ângulo é 90º :stuck_out_tongue:

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

P

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).

M

entanglement:
O ângulo é 90º :stuck_out_tongue:

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

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…

E

Maiquelnet:
entanglement:
O ângulo é 90º :stuck_out_tongue:

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

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…

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.

M

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).

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

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

M

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.

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…

E

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)”.

P

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.

E

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]));
        }
    }
}
E

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.

M

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)”.

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…

M
entanglement:
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]));
        }
    }
}
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?
Criado 29 de novembro de 2009
Ultima resposta 1 de dez. de 2009
Respostas 12
Participantes 3