gpt4 book ai didi

algorithm - 如何计算向量与垂直方向的夹角?

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:26:59 25 4
gpt4 key购买 nike

我试图找出两个二维向量之间的角度(以度为单位)。我知道我需要使用三角函数,但我不太擅长。这就是我要解决的问题(Y 轴向下增加): alt text

我现在正在尝试使用这段代码,但它根本不起作用(出于某种原因计算随机角度):

private float calcAngle(float x, float y, float x1, float y1)
{
float _angle = (float)Math.toDegrees(Math.atan2(Math.abs(x1-x), Math.abs(y1-y)));
Log.d("Angle","Angle: "+_angle+" x: "+x+" y: "+y+" x1: "+x1+" y1: "+y1);
return _angle;
}

这些是我的结果(提供恒定位置时有常数,但是当我改变位置时,角度会改变,我找不到两个角度之间的任何联系):

位置 1:x:100 y:100x1:50 y1:50角度:45

位置 2:x:92 y:85x1:24 y1:16角度:44.58

位置 3:x:44 y: 16x1:106 y1:132角度:28.12

编辑:感谢所有回答并帮助我找出错误的人!抱歉标题和问题令人困惑。

最佳答案

您首先必须了解如何计算两个向量之间的角度,其中有几个。我会给你我认为最简单的。

  1. 给定 v1v2,它们的点积是:v1x * v2x + v1y * v2y
  2. 向量 v 的范数由下式给出:sqtr(vx^2+vy^2)

根据这些信息,请采用以下定义:

dot(v1, v2) = norm(v1) * norm(v2) * cos(angle(v1, v2))

现在,你求解angle(v1, v2):

angle(v1, v2) = acos( dot(v1, v2) / (norm(v1) * norm(v2)) )

最后,采用开头给出的定义,最后得到:

angle(v1, v2) = acos( (v1x * v2x + v1y * v2y) / (sqrt(v1x^2+v1y^2) * sqrt(v2x^2+v2y^2)) )

同样,有很多方法可以做到这一点,但我喜欢这个,因为它对给定角度和范数或给定向量的角度的点积很有帮助。

答案将以弧度为单位,但您知道 pi 弧度(即 3.14 弧度)是 180 度,因此您只需乘以转换因子 180/pi。

关于algorithm - 如何计算向量与垂直方向的夹角?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3441782/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com