繁体   English   中英

返回 Nan 的向量之间的角度

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM