2016-01-11 1 views
1

J'essaie de créer un programme où trois points aléatoires dans un cercle sont créés et aboutissent à la création d'un triangle inscrit. Cependant, les angles que je reçois sont tous foiréTrois points aléatoires sur un cercle

Voici mon code:

public static void main(String[] args) { 
     double r = 40.0; 
     double angle1 = Math.random()* (2 * Math.PI); 
     double angle2 = Math.random()* (2 * Math.PI); 
     double angle3 = Math.random()* (2 * Math.PI); 
     double x_1 = r * Math.cos(angle1); 
     double y_1 = r * Math.sin(angle1); 
     double x_2 = r * Math.cos(angle2); 
     double y_2 = r * Math.sin(angle2); 
     double x_3 = r * Math.cos(angle3); 
     double y_3 = r * Math.sin(angle3); 
     System.out.println("The coordinates of the three points are: 
     (" + x_1 +     ", " + y_1 + ") 
     (" + x_2 + ", " + y_2 + ") 
     (" + x_3 + ", " + y_3 + ")"); 
    //Get length of each side 
    double distanceFrom1To2 = Math.sqrt(Math.pow(x_2 - x_1, 2) + 
    Math.pow(y_2 - y_1, 2)); 
    double distanceFrom2To3 = Math.sqrt(Math.pow(x_3 - x_2, 2) + 
    Math.pow(y_3 - y_2, 2)); 
    double distanceFrom3To1 = Math.sqrt(Math.pow(x_1 - x_3, 2) + 
    Math.pow(y_1 - y_3, 2)); 
    //Get angles *** 
    double triangleAngle1 = Math.atan(distanceFrom1To2/distanceFrom2To3); 
    double triangleAngle2 = Math.atan(distanceFrom2To3/distanceFrom3To1); 
    double triangleAngle3 = Math.atan(distanceFrom3To1/distanceFrom1To2); 
    System.out.println("The three angles are " + triangleAngle1 + " " + 
    triangleAngle2 + " " + triangleAngle3); 
    System.out.println(triangleAngle1 + triangleAngle2 + triangleAngle3); 
} 

Je sais pertinemment que les moyens d'obtenir les angles sont foiré. Voici une série d'échantillons de mon programme:

The coordinates of the three points are: (5.224534224725408, 
    -39.65733528787168) (-29.696946087404676, 26.79722733944279) 
    (32.70889681040468, -23.02451018906371) 

    The three angles are 0.7545364726122026 1.18830825410364 
    0.40435068059871415 
    Total angle sum: 2.347195407314557 

Les angles tous les ajouter à beaucoup plus que Pi/2 radians. Je l'ai examiné la loi de Sines, mais vous devez savoir au moins un angle pour que ...

+2

Vous devez utiliser ['atan2'] (https://docs.oracle.com/javase/7/docs/api/java/lang/Math.html#atan2 (double,% 20double)) au lieu de' atan' pour vos angles. Je suppose que c'est Java, vous devriez marquer vos questions avec une langue - mais le conseil est valable quelle que soit la langue. –

Répondre

0

figured it out

Voici le code fixe:

//Get length of each side 
    double a = Math.sqrt(Math.pow(x_2 - x_1, 2) + Math.pow(y_2 - y_1, 2)); // distance from 1 to 2 
    double b = Math.sqrt(Math.pow(x_3 - x_2, 2) + Math.pow(y_3 - y_2, 2)); // distance from 2 to 3 
    double c = Math.sqrt(Math.pow(x_1 - x_3, 2) + Math.pow(y_1 - y_3, 2)); // distance from 3 to 1 
    //Get angles *** 
    double triangleAngle1 = Math.acos((Math.pow(a, 2) + Math.pow(b, 2) - Math.pow(c, 2))/(2 * a * b)); 
    double triangleAngle2 = Math.acos((Math.pow(b, 2) + Math.pow(c, 2) - Math.pow(a, 2))/(2 * c * b)); 
    double triangleAngle3 = Math.acos((Math.pow(c, 2) + Math.pow(a, 2) - Math.pow(b, 2))/(2 * a * c)); 

je l'ai changé utilise la loi des cosinus.