[英]Angle between vectors returning a Nan
我一直在尝试返回向量之间的角度,经过几次尝试,所有打印的都是“NaN”。
public static void displayVector(double v) {
System.out.print(v);
}
// magnitude
public static double magnitude(int[] v) {
double mag = 0;
for (int i:v) {
mag += Math.pow(i, 2);
}
mag = Math.sqrt(mag);
return mag;
}
// angle between vectors
public static double angle(int[] v1, int[] v2) {
double loopSum = 0;
double magSum = magnitude(v1) + magnitude(v2);
for (int i = 0; i < v1.length; i++) {
loopSum += (v1[i]*v2[i]);
}
double angle = Math.toDegrees(Math.acos(loopSum / magSum));
return angle;
}
public static void main(String[] args) {
int[] A = {2, 5, 7};
int[] B = {6, 3, 1};
Helper.displayVector(Helper.angle(A, B));
}
你的公式是错误的。
角度是点积除以幅度的乘积您的代码计算幅度的总和,使其小于点积(loopSum),因此计算值大于 1 的 acos
改成
double magProd = magnitude(v1) * magnitude(v2);
然后
double angle = Math.toDegrees(Math.acos(loopSum / magProd));
它应该像魅力一样工作
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.