V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
KasuganoSoras
V2EX  ›  编程

在已知车辆的坐标、速度向量以及旋转的情况下,求出车辆的漂移角度?

  •  
  •   KasuganoSoras · 2022-08-09 21:45:11 +08:00 · 1560 次点击
    这是一个创建于 855 天前的主题,其中的信息可能已经有所发展或是发生改变。

    RT ,最近在开发一个游戏模组,想做一个漂移角度显示(就是下图中底部的那个条),目前能够通过脚本得到的信息有车辆的坐标、当前速度向量 Vector3 ,以及旋转( roll, pitch, yaw ),如何计算出车辆的漂移角度?

    img

    已经有一段 Github 找的代码可以计算出漂移角度,但是它永远只能计算出正的角度,无法得知车辆是向左还是向右漂移。

    function angle(veh)
        local vx, vy, vz = table.unpack(GetEntityVelocity(veh))
        local modV = math.sqrt(vx*vx + vy*vy)
        local rx, ry, rz = table.unpack(GetEntityRotation(veh, 0))
        local sn, cs = -math.sin(math.rad(rz)), math.cos(math.rad(rz))
        
        -- 如果速度太慢则返回 0
        if GetEntitySpeed(veh)* 3.6 < 5 or GetVehicleCurrentGear(veh) == 0 then
            return 0
        end
        
        local cosX = (sn*vx + cs*vy) / modV
        if cosX > 0.966 or cosX < 0 then
            return 0
        end
        return math.deg(math.acos(cosX)) * 0.5
    end
    

    各位 v2 大佬有什么好的方法吗?数学不好,实在是想不出来了

    对了,语言是 Lua ,如果有其他语言的例子也可以,谢谢了~

    第 1 条附言  ·  2022-08-09 22:58:13 +08:00

    结贴,找到了一个方法叫 GetEntityRotationVelocity,可以获取实体的旋转速度,根据旋转速度可以得到车辆当前在向哪个方向旋转,结合在 Github 找到的这段代码就可以得到车辆漂移角度的正负值了。

    3 条回复    2022-08-09 23:49:16 +08:00
    GordianZ
        1
    GordianZ  
    MOD
       2022-08-09 23:15:30 +08:00
    拿到 vx,vy 速度分量之后做个 atan 就是红色箭头的指向了, 然后拿来减 rz(绿色箭头)看正负就是左右了。
    KasuganoSoras
        2
    KasuganoSoras  
    OP
       2022-08-09 23:17:58 +08:00
    @GordianZ #1 谢谢大佬,我试一下
    Weyeeep
        3
    Weyeeep  
       2022-08-09 23:49:16 +08:00 via Android
    我在 v2 看 0 梦,草
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   860 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 22ms · UTC 22:15 · PVG 06:15 · LAX 14:15 · JFK 17:15
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.