Math 时间、角度和速度后的矢量估计位置

Math 时间、角度和速度后的矢量估计位置,math,vector,3d,physics,future,Math,Vector,3d,Physics,Future,在给定角度和速度下运动一段时间后,如何计算三维矢量位置 我有这些变量:当前位置、水平角、垂直角和速度 我想计算未来的位置 速度定义为: float distMade = this->Position().GetDistanceTo(lastPosition); float speed = (distMade / timeFromLastCheck) * 1000; // result per sec // checking every 100ms 垂直角度坐标系

在给定角度和速度下运动一段时间后,如何计算三维矢量位置

我有这些变量:当前位置、水平角、垂直角和速度

我想计算未来的位置

速度定义为:

    float distMade = this->Position().GetDistanceTo(lastPosition);
    float speed = (distMade / timeFromLastCheck) * 1000; // result per sec 
    // checking every 100ms
垂直角度坐标系:
100%向下-PI/2(-1.57)
正面100%向上PI/2(1.57)

水平角度:
弧度系统,朝北=PI/2
面向西方=圆周率


定位3d矢量:x,y,z,其中z是高度水平。

如果水平角是方位角,垂直角是仰角,

然后


在这种情况下,你的速度是笛卡尔速度

因此:

  • 获取笛卡尔空间中不同时间点的位置

    • P0=(x0,y0,z0)-最后位置[单位]
    • P1=(x1,y1,z1)-实际位置[单位]
    • dt=0.1-获取
      P0
      P1
  • 从获取
    P1

    • P(t)=P1+(P1-P0)*t/dt
    • 扩展:
    • x=x1+(x1-x0)*t/dt
    • y=y1+(y1-y0)*t/dt
    • z=z1+(z1-z0)*t/dt
  • 如果需要angh、angv、dist(坐标系原点为
    (0,0,0)

    • 然后使用此选项或将其修改为坐标系:
    • dist=| P |=sqrt(x*x+y*y+z*z)
    • angv=asin(z/dist)
    • angh=atan2(y,x)
    • 这适用于:Z轴=向上,Y轴=北,X轴=东
    • 如果原点不是(0,0,0),则在转换之前从P中减去它

  • 看起来你正试图根据当前职位和以前的职位预测未来的职位,并知道两者之间的持续时间

    在这种情况下,看起来你根本不需要角方向,只要保持你的“速度”作为一个向量

    speed = (position() - lastPosition) / (time-last_time);
    future_position = position()+(future_time-time)*speed;
    
    如果向量对象没有重载运算符,请查找对每个x、y、z分量独立执行计算的运算符


    当然,这不考虑任何加速度,只是根据当前速度进行预测。你也可以通过对过去5-10个速度进行平均来平滑它,以获得稍微不那么紧张的预测。如果你想考虑加速度,那么你必须以跟踪最后一个位置的相同方式跟踪最后一个速度目前,加速度只是速度-最后一个速度。你可能还想对其进行平均。

    如果V是速度,那么应该是V*t,其中t是经过的时间。指定你的速度类型1.角速度
    角度'=ω'=epsilon
    或2.笛卡尔速度
    位置'=speed'=加速度
    也指定使用的坐标系(H,V角度意味着方位坐标系,但还有更多)
    speed = (position() - lastPosition) / (time-last_time);
    future_position = position()+(future_time-time)*speed;