私は数時間答えを探していましたが、何も見つかりませんでした。これが重複している場合は申し訳ありませんが、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) は x の極限が無限大に近づくにつれて 45 に収束しているように見えます。問題は、この関数が 0.01 から 10.0 の間の値に対して機能する必要があることです。
関数がこのように動作する理由と、探している答えを得る方法を知っている人はいますか?
PS私は最初に内積アイデンティティを使用しようとしましたacos((ax*bx+ay*by)/|a||b|)
が、同様の問題が発生しました