почему sqrt раз возвращает неправильное значение

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

часть, где я застрял, - это возвращение ansx и 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 дают хороший ответ на моем реальном калькуляторе, но не в программе?

Спасибо за помощь.


person user2898975    schedule 17.11.2013    source источник


Ответы (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);
person shuttle87    schedule 17.11.2013