pessoal, como posso identificar o ângulo de um triângulo retângulo impresso em uma imagem digital??
O ângulo é 90º
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º
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º
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?