2013-11-17 4 views
0

Я кодирую калькулятор, который находит координаты повернутой точки. (вдохновлено математическим учебником на youtube http://www.youtube.com/watch?v=NQduSvpTyhs)почему sqrt times cos возвращает неправильное значение

часть, где я застрял, является возвратом анс и асы. вместо 4.0 и 3.6 он возвращает ответ об ошибке. (Nouvelles coordoner: -3,0853888289108733, -4,413657867849748)

Я не могу понять, что происходит не так в этих 2-х линий ...

static void tourner() 
    { 
     Scanner tournsc = new Scanner(System.in); 
     double coordx, coordy, roattiondeg, ansx, ansy, angle, triangleh, newangle; 
     //Test input : X 5, Y 2, rotation deg 20 
     System.out.println("Coord X :"); 
     coordx = tournsc.nextInt(); 
     System.out.println("Coord Y :"); 
     coordy = tournsc.nextInt(); 

     System.out.println("Degre : "); 
     roattiondeg = tournsc.nextInt(); 

     triangleh = ((Math.pow(coordx, 2)) + (Math.pow(coordy, 2))); 

     angle = Math.toDegrees(Math.atan(coordy/coordx)); 
     newangle = roattiondeg + angle; 
     ansx = Math.sqrt(triangleh)*Math.cos(newangle); 
     ansy = Math.sqrt(triangleh)*Math.sin(newangle); 
     System.out.println("Nouvelles coordoner : " + ansx + "," + ansy); 


    } 

Вопрос: почему ansx и Ansy дать хороший ответ на мой реальной жизни Calculater но неправильно в программе?

thx for помогает.

ответ

0

Библиотечные функции sin и cos ожидают, что их вход будет в радианах, но вы передали им градусы.

Просто держать все это в радианах от входа вперед, и вы не должны иметь проблемы:

roattiondeg = Math.toRadians(tournsc.nextInt()); 

    triangleh = ((Math.pow(coordx, 2)) + (Math.pow(coordy, 2))); 

    angle = Math.atan(coordy/coordx)); 
    newangle = roattiondeg + angle; 
    ansx = Math.sqrt(triangleh)*Math.cos(newangle); 
    ansy = Math.sqrt(triangleh)*Math.sin(newangle); 
    System.out.println("Nouvelles coordoner : " + ansx + "," + ansy); 
Смежные вопросы