2012-04-20 879 views
1

我很难理解我的代码出了什么问题。计算android中三个点之间的角度

Point A = new Point((int)CENTER_X, (int)CENTER_Y); 
Point B = new Point((int)me.getX(), (int)me.getY()); 
Point C = new Point((int)CENTER_X, (int)B.y); 
double AB; 
double AC; 
double BC; 
AB = Math.sqrt(Math.pow(B.x - A.x, 2) + Math.pow(B.y - A.y, 2)); 
AC = Math.sqrt(Math.pow(C.x - A.x, 2) + Math.pow(C.y - A.y, 2)); 
BC = Math.sqrt(Math.pow(C.x - B.x, 2) + Math.pow(C.y - B.y, 2)); 
degre = (AB * AB - AC * AC - BC * BC) /(2 * AC * AB); 
degre = Math.acos(degre*(180/Math.PI)); 

我总是得到degre = 0NaN。这是为什么 ?

回答

2

你感到困惑时做弧度平移度,你需要计算的比值,然后做arccos(这将返回弧度的角度),然后转换为度,像这样:

double float ratio = (AB * AB + AC * AC - BC * BC) /(2 * AC * AB); 
degre = Math.acos(ratio)*(180/Math.PI); 
+0

第一行是血清... (AB * AB - AC * AC - BC * BC)/(2 * AC * AB) 我使用错误的eq吗? – roiberg 2012-04-20 09:59:37

+0

我没有检查你的触发,但相信你正确使用余弦规则。 – Elemental 2012-04-20 10:02:56