簡體   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