我一直在寻找几个小时的答案,但一无所获。如果这是重复的,我很抱歉,但我无法在 StackOverflow 上找到解决我的具体问题的方法。
我有一个函数可以找到一个点和 y 轴之间的角度:
public static double getAngle(float x1,float y1) {
float y_x = 0;
float y_y = 1;
float p_x = x1;
float p_y = y1;
float theta = (float)Math.atan2((p_x-y_x),(p_y-y_y));
return (float)Math.toDegrees(theta)
}
然后当我调用它时,我会得到奇怪的行为:
getAngle(1,1); //returns 90.00000250447816
getAngle(5,5); //returns 51.34019265119512
getAngle(10,10); //returns 48.012787449847956
getAngle(100,100); //returns 45.287917631417216
getAngle(1000,1000); //returns 45.02866072599646
我知道答案是 45。当 x 的极限接近无穷大时,函数 `getAngle(x,x) 会收敛到 45。问题是我需要这个函数来处理 0.01 到 10.0 之间的值
有谁知道为什么该功能会以这种方式运行以及如何获得我正在寻找的答案?
PS我最初尝试使用点积标识acos((ax*bx+ay*by)/|a||b|)
并遇到了类似的问题