为什么sqrt times cos返回错误的值

时间:2013-11-17 03:24:09

标签: java math sqrt sin cos

我正在编写一个计算器,用于查找旋转点的坐标。 (灵感来自youtube上的数学教程http://www.youtube.com/watch?v=NQduSvpTyhs

我陷入困境的部分是ansx和ansy的回归。而不是4.0和3.6它返回incorect答案。 (Nouvelles coordoner:-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对我的现实生活计算器给出了很好的答案,但在程序中却出错了?

thx for help。

1 个答案:

答案 0 :(得分:0)

库函数sincos期望它们的输入为弧度,但是你将它们传递给它们。

从输入开始,只需保持弧度,你就不会有问题:

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