Java 如何计算两个向量之间的角度?

Java 如何计算两个向量之间的角度?,java,math,vector,trigonometry,Java,Math,Vector,Trigonometry,我们试图得到v和u之间的cos值,但得到的结果远远大于1或小于0 其中: vx = in.nextInt(); // x speed of your pod vy = in.nextInt(); // y speed of your pod int ux = nextCheckPointIdX - x; int uy = nextCheckPointIdY - y; 以下是公式: double cos = (vx*ux + vy*uy) / ( Math.sqrt(Math.pow(vx,

我们试图得到v和u之间的cos值,但得到的结果远远大于1或小于0

其中:

vx = in.nextInt(); // x speed of your pod
vy = in.nextInt(); // y speed of your pod

int ux = nextCheckPointIdX - x;
int uy = nextCheckPointIdY - y;
以下是公式:

double cos = (vx*ux + vy*uy) / ( Math.sqrt(Math.pow(vx, 2) + Math.pow(vy, 2)) + Math.sqrt(Math.pow(ux, 2) + Math.pow(uy, 2)) );

您发现前一行有错误吗?

分母有问题

int num = (vx*ux + vy*uy);
double den = (Math.sqrt(Math.pow(vx, 2) + Math.pow(vy, 2)) * (Math.sqrt(Math.pow(ux, 2) + Math.pow(uy, 2))) );
double cos =  num / den;
System.out.println(cos);
System.out.println(Math.acos(cos));

分母出了问题

int num = (vx*ux + vy*uy);
double den = (Math.sqrt(Math.pow(vx, 2) + Math.pow(vy, 2)) * (Math.sqrt(Math.pow(ux, 2) + Math.pow(uy, 2))) );
double cos =  num / den;
System.out.println(cos);
System.out.println(Math.acos(cos));

两个向量的点积是两个向量的乘积乘以两个向量之间的夹角的余弦lengths@harold我编辑了这个问题,我们不想要产品,你想要的是产品。就像我说的,两个向量的点积是cos(角度)*|A |*|B |,所以为了提取
cos(角度)
部分,你必须除以长度的乘积。这个公式中没有长度之和,实际上这在一般情况下是很少见的,你得到的是cos(θ)。要得到θ值,你必须找到反余弦(值)。@Aayuskumarsingha问题是,他计算的余弦值超出了余弦的范围。两个向量的点积是两个向量的乘积与角的乘积的余弦lengths@harold我编辑了这个问题,我们不想要产品,你想要的是产品。就像我说的,两个向量的点积是cos(角度)*|A |*|B |,所以为了提取
cos(角度)
部分,你必须除以长度的乘积。这个公式中没有长度之和,实际上这在一般情况下是很少见的,你得到的是cos(θ)。要得到θ值,你必须找到反余弦(值)。@Ayushkumarsingha问题是他计算的余弦值超出了余弦的范围。@Ayushkumarsingha哦,天哪,那是个错误。问题解决了!谢谢你。@Ayushkumarsingha哦,天哪,这个错误。问题解决了!非常感谢。