2016-11-16 220 views
0

我們正在試圖讓V和U之間的CoS值,但我們得到的結果比1高得多或多或少比0如何計算兩個向量之間的角度?

其中:

vx = in.nextInt(); // x speed of your pod 
vy = in.nextInt(); // y speed of your pod 

int ux = nextCheckPointIdX - x; 
int uy = nextCheckPointIdY - y; 

下面是公式:

double cos = (vx*ux + vy*uy)/(Math.sqrt(Math.pow(vx, 2) + Math.pow(vy, 2)) + Math.sqrt(Math.pow(ux, 2) + Math.pow(uy, 2))); 

您是否在上一行發現任何錯誤?

+3

兩個向量的點積是其長度的*產品* – harold

+0

@harold我編輯的問題,時間之間的夾角的餘弦值,我們不想要的產品 –

+1

你確實想要的產品。就像我說的,兩個向量的點積是cos(角度)* | A | * | B |',所以爲了提取'cos(角度)'部分,必須除以長度的乘積。在這個公式中沒有任何長度的總和,實際上這在一般情況下是罕見的。 – harold

回答

1

分母有問題。

int num = (vx*ux + vy*uy); 
double den = (Math.sqrt(Math.pow(vx, 2) + Math.pow(vy, 2)) * (Math.sqrt(Math.pow(ux, 2) + Math.pow(uy, 2)))); 
double cos = num/den; 
System.out.println(cos); 
System.out.println(Math.acos(cos)); 
+0

@bradimus它有用嗎?如果是,請標記爲已接受的答案。 –

+0

這不是我的問題,但我會投票。 – bradimus

+0

謝謝。 @bradimus –

相關問題