返回 Nan 的向量之间的角度

Angle between vectors returning a Nan

我一直在尝试 return 向量之间的角度,经过几次尝试,所有打印的都是“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));

而且它应该很有魅力