Pessoal…
preciso de uma breve explicação:
graças ao usuário entanglement, consegui o código abaixo, que retorna o ângulo da tangente de 3 vértices de uma imagem (triângulo).
Devo passar o valor das coordenadas (x,y) de cada vértices do triângulo , ou seja, 3 vértices, como parametros…
Só não entendi, onde insiro esses parametros… fiz uns testes mas deu valor negativo. Gostaria de uma explicação como funciona o código, ou onde devo informar as coordenadas (x,y)?
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]));
}
}
}
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]));
}
}
}