Получение угла тангажа транспорта

YodBones

Участник
Автор темы
4
5
Версия MoonLoader
.026-beta
Как получить угол тангажа транспорта?
 
Решение
Возвращает в радианах (math.deg - переведет в градусы)
Lua:
function getVehiclePitch(vehicle)
    local qx, qy, qz, qw = getVehicleQuaternion(vehicle)
   
    local sinp = 2.0 * (qw * qy - qz * qx)
    local cosp = 1.0 - 2.0 * (qx * qx + qy * qy)
   
    return math.atan2(sinp, cosp)
end
Почему то не работало, прогнал через Gemini, выдало рабочий вариант:
Код:
function getVehiclePitch(vehicle)
    local qx, qy, qz, qw = getVehicleQuaternion(vehicle)
    
    local sinp = 2.0 * (qw * qx + qy * qz)
    local cosp = 1.0 - 2.0 * (qx * qx + qy * qy)
    
    return math.atan2(sinp, cosp)
end

вайега52

Налуашил состояние
Модератор
2,985
3,105
Возвращает в радианах (math.deg - переведет в градусы)
Lua:
function getVehiclePitch(vehicle)
    local qx, qy, qz, qw = getVehicleQuaternion(vehicle)
    
    local sinp = 2.0 * (qw * qy - qz * qx)
    local cosp = 1.0 - 2.0 * (qx * qx + qy * qy)
    
    return math.atan2(sinp, cosp)
end
 
  • Нравится
Реакции: YodBones

pathtohell

Участник
16
62
В дополнение:
Lua:
function setVehiclePitch(vehicle, pDeg)
    local pitch = math.rad(pDeg)
    local x, y, z, w = getVehicleQuaternion(vehicle)
    local yaw = math.atan2(2 * (w * z + x * y), 1 - 2 * (y * y + z * z))
    local roll = math.atan2(2 * (w * y + x * z), 1 - 2 * (x * x + y * y))
    local cy, sy = math.cos(yaw * 0.5), math.sin(yaw * 0.5)
    local cp, sp = math.cos(pitch * 0.5), math.sin(pitch * 0.5)
    local cr, sr = math.cos(roll * 0.5), math.sin(roll * 0.5)
    local qw = cr * cp * cy + sr * sp * sy
    local qx = sr * cp * cy - cr * sp * sy
    local qy = cr * sp * cy + sr * cp * sy
    local qz = cr * cp * sy - sr * sp * cy
    setVehicleQuaternion(vehicle, qx, qy, qz, qw)
    return true
end
 
  • Нравится
Реакции: вайега52 и YodBones

YodBones

Участник
Автор темы
4
5
Возвращает в радианах (math.deg - переведет в градусы)
Lua:
function getVehiclePitch(vehicle)
    local qx, qy, qz, qw = getVehicleQuaternion(vehicle)
   
    local sinp = 2.0 * (qw * qy - qz * qx)
    local cosp = 1.0 - 2.0 * (qx * qx + qy * qy)
   
    return math.atan2(sinp, cosp)
end
Почему то не работало, прогнал через Gemini, выдало рабочий вариант:
Код:
function getVehiclePitch(vehicle)
    local qx, qy, qz, qw = getVehicleQuaternion(vehicle)
    
    local sinp = 2.0 * (qw * qx + qy * qz)
    local cosp = 1.0 - 2.0 * (qx * qx + qy * qy)
    
    return math.atan2(sinp, cosp)
end
 
  • Нравится
Реакции: вайега52