如题,编写一个Java程序,将笛卡尔坐标转换为极坐标。您的程序应该采用两个实数输入x和y,并根据以下公式打印极坐标r和θ。
测试用例1:
输入:
1.0
1.0
输出:
r = 1.4142135623730951
theta = 0.7853981633974483
测试用例2:c
输入:
-1.0
-1.0
输出:
r = 1.4142135623730951
theta = -2.356194490192345
当我们用atan(y/x)时,用例1可以运行成功,而用例2会得到错误的答案,如图:
代码如下
public static void main(String[] args) {
Scanner kb = new Scanner(System.in);
double x = Double.parseDouble(kb.nextLine());
double y = Double.parseDouble(kb.nextLine());
double r = Math.sqrt(x*x + y*y);
double theta = Math.atan(y/x);
System.out.println("r = "+ r);
System.out.println("theta = "+ theta);
当x和y都是-1时,坐标理应出现在第三象限,但由于-1/-1=1/1=1,系统判定为和用例1一样的情况(在第一象限),但我们使用atan2作为代码时,则不会出现此情况。如图:
代码如下
public static void main(String[] args) {
Scanner kb = new Scanner(System.in);
double x = Double.parseDouble(kb.nextLine());
double y = Double.parseDouble(kb.nextLine());
double r = Math.sqrt(x*x + y*y);
double theta = Math.atan2(y,x);
System.out.println("r = "+ r);
System.out.println("theta = "+ theta);