Math 计算对象的移动方向
给定多维空间和目标位置以及运动对象的速度,如何确定对象是否朝着正确的方向移动,从而接近目标 例如,如果我有一个三维空间,我有一个期望的目标位置[0,0,100],我知道我的运动对象以[1,2,4]的速度运动,如何计算运动方向和期望方向之间的差异Math 计算对象的移动方向,math,Math,给定多维空间和目标位置以及运动对象的速度,如何确定对象是否朝着正确的方向移动,从而接近目标 例如,如果我有一个三维空间,我有一个期望的目标位置[0,0,100],我知道我的运动对象以[1,2,4]的速度运动,如何计算运动方向和期望方向之间的差异 请注意,我没有使用unity您提出的问题更像是一个数学问题,而不是一个编程问题。我相信这仍然是一个主题,但这意味着我们将有更多的数学解决方案。我假设你可以使用的数学函数很少 安装程序 (注意:这将涉及向量。如果变量为粗体,则将其视为向量。) 因此,我们希
请注意,我没有使用unity您提出的问题更像是一个数学问题,而不是一个编程问题。我相信这仍然是一个主题,但这意味着我们将有更多的数学解决方案。我假设你可以使用的数学函数很少 安装程序 (注意:这将涉及向量。如果变量为粗体,则将其视为向量。) 因此,我们希望达到Pf=[0,0100]单位。我们是以π为单位的。我们有一个v=[1,2,4]单位/帧的速度 如果我理解正确,我们想知道两件事:
点(v,sf)=| 快速提示:双栏表示向量分量的平方和,或
||v||=sqrt(vx2+vy2+vz2)
为了使这更容易处理,我假设我们已经提前计算了震级,所以我们可以把它们留在方程中 无论如何,(Equ 1)是不够的!我们不知道Ɵ或点(v,sf),那么现在呢 在维基百科的第一篇文章中,有另一个关于点积的定义。事情是这样的: (等式2)
点(v,sf)=vxsfx+vysfy+vzsfz 我们知道所有这些价值观!因为(eq1)等于(eq2),我们可以把这两个方程结合起来。这让我们: ||v| | | |sf| | cos(Ɵ)=vxsfx+vysfy+vzsfz 啊,把事情弄得乱七八糟 cos(Ɵ)=(vxsfx+vysfy+vzsfz)/v
…或…
Ɵ=cos-1((vxsfx+vysfy+vzsfz)/(|v| | |sf| |) 这就是我们最后的等式 庆祝!!! 好吧…现在我们要实际使用它。如果你不是数学类型的人(或者,如果我的解释很糟糕,我把你丢在了什么地方),我会把这最后一个方程能为我们做些什么归结起来 最后一个方程的结果决定了我们偏离的角度。其范围为0度到180度(或0弧度到π弧度)。0度意味着我们正朝着目标直接前进,而180度意味着我们正朝着目标直接前进 如果|v| |或|sf| |为零,则该等式无效。这是有道理的;如果我们已经在目标的顶部,那么行进的距离为零,没有角度可计算。同时,如果速度为零,那么我们哪里也去不了,也无法计算角度。请注意,如果向量的所有值都为零,则向量的大小仅为零,因此这是一个简单的检查 数学很好,但是。。。 我将把这一点放在一个术语中,这个术语对程序员来说应该更熟悉 结构向量3{double x,y,z;} 浮点数(矢量3 v) { 返回sqrt(v.x*v.x+v.y*v.y+v.z*v.z) } 浮动角(矢量3当前位置、矢量3目标位置、矢量3速度) { Vector3 targetDir=目标位置-当前位置 if(` targetDir中的所有值均为零` 或“速度中的所有值均为零”) { //我们不能退回任何有效的东西,可能会退回 //-1或抛出异常或其他 } //计算点积 双分子= 速度.x*targetDir.x +速度y*targetDir.y +速度z*targetDir.z 双分母=CalcMagnitude(速度)*CalcMagnitude(目标方向) 返回ACO(分子/分母) }
你知道移动对象的位置吗?我投票结束这个问题,因为它与编程无关。哦,是的。这是一道数学和物理题。然而,说它与编程无关并不完全正确。这是我在最近的项目(机器学习)中需要解决的重要问题之一。我也不知道数学问题在stackoverflow中是不受欢迎的。那么这本质上是一个寻找targetDir和速度之间的角度的问题吗?是的,差不多。对于几何体,它看起来很简单(它是一对向量),但是单独使用组件需要更多的步骤。