Szerző Téma: Egy dõlésszögbõl X, Y tengelyen belüli dõlésszög -> SetVehicleAngularVolecity  (Megtekintve 510 alkalommal)

Nem elérhető totar

  • 425
    • Profil megtekintése
0 Show voters
Üdv!
Van egy kód,:
 

stock ConvertNonNormaQuatToEuler(Float:qw,Float:qx,Float:qy,Float:qz,&Float:heading,&Float:attitude,&Float:bank)
{
    new Float:sqw = qw * qw,
Float:sqx = qx * qx,
Float:sqy = qy * qy,
Float:sqz = qz * qz,
Float:unit = sqx + sqy + sqz + sqw,
Float:test = qx * qy + qz*qw;
if(test > 0.499 * unit)
{
heading = 2 * atan2(qx,qw);
attitude = 3.141592653 / 2;
bank = 0;
}
if(test < -0.499 * unit)
{
heading = -2 * atan2(qx,qw);
attitude = -3.141592653 / 2;
bank = 0;
}
    heading = atan2(2 * qy * qw - 2 * qx * qz, sqx - sqy - sqz + sqw);
attitude = asin(2 * test / unit);
bank = atan2(2 * qx * qw - 2 * qy * qz, - sqx + sqy - sqz + sqw);
return 1;
}
stock GetVehicleRotation(vehicleid,&Float:heading,&Float:attitude,&Float:bank)
{
    new Float:quat_w,
Float:quat_x,
Float:quat_y,
Float:quat_z;
    GetVehicleRotationQuat(vehicleid,quat_w,quat_x,quat_y,quat_z);
ConvertNonNormaQuatToEuler(quat_w,quat_x,quat_z,quat_y,heading,attitude,bank);
bank = -1 * bank;
    return 1;
}

 
amivel lelehet kérni a jármû rotációját, és ebbõl a \"bank\" részt fölhasználva a motor elõre/hátra dõlésszögét kapom eredményül!
No, de ezt a számot nem tudom fölhasználni a SetVehicleAngularVolecityhez, mert oda az X, Y tengelyen belüli dõlés szám kellene, de ebbõl az egy számból nem tudok csinálni egy X, Y tengelynek megfelelõt.
Ezért arra gondoltam, hogy a rotation lekérdezésére alkalmas kódot átalakítom, de nem tudom jól megoldani.
Ez az átalakított kód arra szolgálna hogy lekérdezzem a \"bankx\", és a \"banky\"-t.
Íme a 2. kód:
 

stock ConvertNonNormaQuatToEuler(Float:qw,Float:qx,Float:qy,Float:qz,&Float:heading,&Float:attitude,&Float:bank,&Float:bankx,&Float:banky)
{
    new Float:sqw = qw * qw,
Float:sqx = qx * qx,
Float:sqy = qy * qy,
Float:sqz = qz * qz,
Float:unit = sqx + sqy + sqz + sqw,
Float:test = qx * qy + qz*qw;
if(test > 0.499 * unit)
{
heading = 2 * atan2(qx,qw);
attitude = 3.141592653 / 2;
bank = 0;
}
if(test < -0.499 * unit)
{
heading = -2 * atan2(qx,qw);
attitude = -3.141592653 / 2;
bank = 0;
}
    heading = atan2(2 * qy * qw - 2 * qx * qz, sqx - sqy - sqz + sqw);
attitude = asin(2 * test / unit);
bank = atan2(2 * qx * qw - 2 * qy * qz, - sqx + sqy - sqz + sqw);
bankx = atan2(2 * qx * qw, - sqx + sqy);
banky = atan2(2 * qy * qz, - sqz + sqw);
return 1;
}
stock GetVehicleRotation(vehicleid,&Float:heading,&Float:attitude,&Float:bank,&Float:bankx,&Float:banky)
{
    new Float:quat_w,
Float:quat_x,
Float:quat_y,
Float:quat_z;
    GetVehicleRotationQuat(vehicleid,quat_w,quat_x,quat_y,quat_z);
ConvertNonNormaQuatToEuler(quat_w,quat_x,quat_z,quat_y,heading,attitude,bank,bankx,banky);
bank = -1 * bank;
bankx = -1 * bankx;
banky = -1 * banky;
    return 1;
}

 
Ha valaki megtudná mondani, hogy ha lekérdezem rotationt(elõre, hátra dõlést) akkor késõbb hogyan tudom a jármûnbek(motornak) azt a dõlésszöget visszaadni, azt nagyon megköszönném!
Thx

 

SimplePortal 2.3.7 © 2008-2024, SimplePortal