2016-01-11 3 views
1

Я пытаюсь создать программу, в которой создаются три случайные точки в круге и приводят к созданию вписанного треугольника. Однако углы я получаю все облажалисьТри случайных точки по кругу

Вот мой код:

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

Я точно знаю, что средства получения углов привинчены вверх. Вот пример запуска моей программы:

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 

Углы все складываются гораздо больше, чем Pi/2 радиан. Я рассмотрел закон синусов, но вы должны знать, по крайней мере, один угол для этого ...

+2

Вы должны использовать ['atan2'] (https://docs.oracle.com/javase/7/docs/api/java/lang/Math.html#atan2 (double,% 20double)) вместо' atan' за ваши углы. Я предполагаю, что это Java, вы должны пометить свои вопросы языком, но совет не зависит от какого языка. –

ответ

0

Фигурные его

Вот фиксированный код:

//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)); 

Я изменил его используйте закон косинусов.

Смежные вопросы