簡體   English   中英

在Java中發現兩點之間的夾角有些奇怪

[英]Finding angle between two points in Java behaving strange

我已經在尋找答案了幾個小時了,卻什么也沒發現。 如果這是重復的,我表示歉意,但我無法在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|) ,但遇到了類似的問題

看來您的數學是錯誤的。 我的方法是找到與水平線的角度,然后減去90度。 例如:

double theta = Math.PI/2 - Math.atan2(y1,x1); //answer in radians

為什么會出錯,是因為您要相互減去向量,以便獲得由新向量定義的三角形的角度。 通過將其測量到X軸並從90減去它,會容易得多:D

你應該簡單地使用

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

x接近無窮大時getAngle(x, x)接近正確角度的原因是您在有效地進行計算

Math.atan2(x, x-1)

等價於

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

因此顯然接近正確

Math.atan(1)

x接近無窮大時。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM