gpt4 book ai didi

java - 在Java中寻找两点之间的角度表现得很奇怪

转载 作者:行者123 更新时间:2023-11-30 07:15:18 26 4
gpt4 key购买 nike

我已经找了几个小时的答案,但一无所获。如果这是重复的,我深表歉意,但我无法在 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。看起来函数 `getAngle(x,x) 收敛于 45,因为 x 的极限接近无穷大。问题是我需要这个函数来处理 0.01 到 10.0 之间的值

有谁知道函数为什么会这样以及我如何才能得到我正在寻找的答案?

附言我最初尝试使用点积身份 acos((ax*bx+ay*by)/|a||b|) 并遇到了类似的问题

最佳答案

你应该简单地使用

float theta = (float) ((Math.PI/2) - Math.atan2(y1, x1));

x 接近无穷大时,您的 getAngle(x, x) 接近正确角度的原因是您在有效计算

Math.atan2(x, x-1)

这是 e quivalent to

Math.atan(x / (x-1))

因此显然接近正确

Math.atan(1)

x 接近无穷大时。

关于java - 在Java中寻找两点之间的角度表现得很奇怪,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17912975/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com