2016-08-24 1 views
0

J'essaie de calculer l'angle entre les points d'une forme à angle n. Il y a 2 tableaux qui contiennent les coordonnées x et y. Je continue d'avoir une erreur avec P13 et je n'arrive pas à comprendre pourquoi. Est-ce que quelqu'un sait une raison?Calculer les angles d'un angle n (plus la comparaison)

public class Ugao { 

    public static int nizovi(double[]a , double[]b , double alfa) { 
     int BrStr = 0; 
     for (int i = 0; i < b.length; i++) { 
      double P12,P13, P23; 
      P12 = duzina(a[i+1], b[i+1], a[i], b[i]); 
      P13 = duzina(a[i+1], b[i+1], a[i+2], b[i+2]); // pisemo prvo i+1 jer je to vertex tacka, ona koja je u centru ugla, zato nije od i 
      P23 = duzina(a[i], b[i], a[i+2], b[i+2]); 

      double x = ugao(P12, P13, P23); 
      if(x > alfa) { 
       System.out.print("Stranica : " + "(" + a[i] + "," + b[i] + ")" + "(" + a[i+1] + "," + b[i+1] + ")" + " & "); 
       System.out.println("(" + a[i+1] + "," + b[i+1] + ")" + "(" + a[i+2] + "," + b[i+2] + ")"); 
       System.out.println(); 
       BrStr++; 
      } 
     } 
     return BrStr; 
    } 


    public static double ugao (double P12, double P13, double P23) { 
     return Math.acos((Math.pow(P12, 2) + Math.pow(P13, 2) - Math.pow(P23, 2))/(2 * P12 * P13)); 
    } 

    public static double duzina (double vertexX1, double vertexY1, double x2, double y2) { 
     return Math.sqrt(Math.pow((vertexX1-x2),2)+ Math.pow((vertexY1-y2), 2)); 
    } 

    public static void main(String[] args) { 
     // TODO Auto-generated method stub 

     double a[] = {12,25,3}; 
     double b[] = {11,20,5}; 

     nizovi(a, b, 45); 

    } 

} 

Répondre

1

Vous n'avez plus de plage de stockage.

Par exemple, si length = 4 tableau contient des index 0..3, mais au dernier cycle courir avec i=3 expression a[i+2] veut élément a[5]

Vous pouvez utiliser l'arithmétique modulo pour obtenir les indices suivants des sommets

current: i 
next: (i+1)%length 
nextnext: (i+2)%length 
+0

Nous vous remercions de correction et suggestion! C'est une bonne solution! :) – Echelonica