返回 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));
而且它应该很有魅力
我一直在尝试 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));
而且它应该很有魅力