Почему sqrt times cos возвращает неправильное значение
Я кодирую вычислитель, который находит координаты повернутой точки. (по материалам учебника по математике на YouTube http://www.youtube.com/watch?v=NQduSvpTyhs)
часть, где я застрял, это возвращение ANX и ANSY. вместо 4.0 и 3.6 он возвращает неверный ответ. (Координатор Nouvelles: -3.0853888289108733,-4.413657867849748)
Я не могу понять, что происходит неправильно в этих двух строках...
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 дают хороший ответ о моем реальном вычислителе, но не правы в программе?
Спасибо за помощь.
1 ответ
Решение
Библиотека функций 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);