2014-02-13 20 views
1

我有兩個點(x1,y1)和(x2,y2)在數學座標中(左下角是原點)。我有一個比例因子SCALE將這些座標縮放到我的屏幕座標,然後補充高度以獲得原始屏幕座標(左上角是原點)。我想知道屏幕座標系中2點的角度。目前我正在做以下事情:在數學座標中找出由一條線所成的角度?

theta=Math.atan((y2-y1)/(x2-x1)); 
if(theta<0) 
theta+=Math.PI; 

但它不工作。我可以做到這一點,而不縮放座標?

編輯:用於 X1 = 7.2 Y1樣本輸出= 9.575 X2 = 5.4 Y2 = 7.15

是53.414度。

+0

縮放座標不會改變角度。你在讀Radians或Degrees的價值嗎?它可能工作,你只是認爲它不是。 很高興知道你在輸入什麼,因爲你的方程看起來是正確的。 – Axoren

+0

座標是「int」嗎? – Keppil

+0

角度爲弧度,座標爲浮點值。 – Madeyedexter

回答

1

這個公式應該適合你。

float angle = (float) Math.toDegrees(Math.atan2(y_2 - y_1, x_2 - x_1)); 

    //Take this out if you want negative values. 
    if(angle < 0){ 
     angle += 360; 
    } 

這將返回一個介於0和359之間的值。如果您希望負值只取出if語句。

你說這是行不通的。你的意思是告訴我,我的眼睛在欺騙我嗎? enter image description here

根據你上面的評論,你期待的是233.41467。你應該留在angle += 360

+0

這不起作用。 – Madeyedexter

+0

@Madeyedexter我更新了我的答案。 – Mozzie

+0

我認爲它應該是'Math.atan2(y_2-y_1,x_2-x_1)'(先y,然後x) – Marco13

0

我認爲用於計算兩個向量R^2之間角度的標準方程如下:(假設alpha是兩個向量之間的角度,v1和v2是兩個向量)

cos(alpha) = abs(dot(v1, v2))/(norm(v1) * norm(v2)) 

所以縮放所述兩個矢量V1 =(X1,Y1)後^ T和v2 =(X2,Y2)^ T篩選coordiantes,應使用上述公式計算的α。 (點代表v1和v2之間的點積,標準是標準的歐幾里德度量)。

之後,您可以獲得以弧度表示的角度(對於轉換爲度數,您可以簡單地除以2 * Pi並乘以360)。