Szerző Téma: Jármû elõtti pozíció kiszámítása  (Megtekintve 1089 alkalommal)

Jármû elõtti pozíció kiszámítása
« Dátum: 2011. Április 04. - 20:05:22 »
0 Show voters
Üdv!
Éppen egy Olyan Speedbooston dolgozom ami nem a SetVehicleVelocity(vehicleid,X*1.1,Y*1.1,Z*1.1);
elven alapul, hannem kiszámitja a kocsi elötti poziciot és az felé tolj lel a kocsit. Ez mind szép és jó kicsit átalakitva hasznánlom a GetPosInFrontOfPlayer függvényt De!
a nagy gond  hogy ez
2D dõlésszöget nem számol bele mivel playernél nem is kell azzal bajlódni.
Viszont nekem jármûnél van erre szükségem szóval itt meg már számit :D
Tehát lehetséges-e egy olyan függvény ami kiszámitja a Jármû elõtti poziciot Rotationt is beleszámitva?
Ha igen akkor megkérem nagy scripter barátainkat segitsenek összedobni :D
Köszönöm!

Nem elérhető jana4

  • 5929
  • Ex Staff
    • Profil megtekintése
Jármû elõtti pozíció kiszámítása
« Válasz #1 Dátum: 2011. Április 04. - 20:23:10 »
0 Show voters
Próbáld meg az X-t vagy az Y-t 5-tel növelni. (vagy amennyivel akarod)

És így kapod meg a jármû elötti pár méter pozícióját.


Azért mondtam hogy próbáld ki mindkettõt, mert az egyikkel biztos menni fog. Én szerintem elõször az Y-al próbálkozz.

Nem elérhető kurta999

  • 2759
  • Éllő fédisznó
    • Profil megtekintése
Jármû elõtti pozíció kiszámítása
« Válasz #2 Dátum: 2011. Április 04. - 20:45:44 »
0 Show voters
Esetleg ?
 

stock ConvertNonNormaQuatToEuler(Float: qw, Float: qx, Float:qy, Float:qz,
                                &Float:heading, &Float:attitude, &Float:bank)
{
    new Float: sqw = qw*qw;
    new Float: sqx = qx*qx;
    new Float: sqy = qy*qy;
    new Float: sqz = qz*qz;
    new Float: unit = sqx + sqy + sqz + sqw; // if normalised is one, otherwise is correction factor
    //a*n~ëe` normalised, - îäe`í, â i\"?îo`e`âíîi` n~ëó÷a`a* - i\"îe^a`ça`o`a*ëü e^î??a*e^öe`e`
    new Float: test = qx*qy + qz*qw;
    if (test > 0.499*unit)
    { // singularity at north pole - în~îáa*ííîn~o`ü ía` n~a*âa*?íîi` i\"îë?n~a*
        heading = 2*atan2(qx,qw);
        attitude = 3.141592653/2;
        bank = 0;
        return 1;
    }
    if (test < -0.499*unit)
    { // singularity at south pole - în~îáa*ííîn~o`ü ía` ??íîi` i\"îë?n~a*
        heading = -2*atan2(qx,qw);
        attitude = -3.141592653/2;
        bank = 0;
        return 1;
    }
    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;
}
///
GetVehicleRotation(vID, X, Y, Z);

Nem elérhető ZeRo

  • 4620
  • Ex Globális Moderátor
    • Profil megtekintése
Jármû elõtti pozíció kiszámítása
« Válasz #3 Dátum: 2011. Április 05. - 14:49:45 »
0 Show voters
Nem tesztelem le, de próbáld meg így:
 

new Float: vPos[ 4 ];
GetVehiclePos( GetPlayerVehicleID( playerid ), vPos[ 0 ], vPos[ 1 ], vPos[ 2 ] );
GetVehicleZAngle( GetPlayerVehicleID( playerid ), vPos[ 3 ] );
vPos[ 0 ] += ( 2 * floatsin( -vPos[ 3 ], degrees ) );
vPos[ 1 ] += ( 2 * floatcos( -vPos[ 3 ], degrees ) );

 
És így értelemszerûen a vPos vektorban lesznek az új koordináták( vPos[ 0 ], vPos[ 1 ], vPos[ 2 ] = x, y, z ).

Jármû elõtti pozíció kiszámítása
« Válasz #4 Dátum: 2011. Április 05. - 17:12:57 »
0 Show voters
Ezt nézd meg.

Jármû elõtti pozíció kiszámítása
« Válasz #5 Dátum: 2011. Április 07. - 16:27:26 »
0 Show voters
Idézetet írta: kurta999 date=1301942744\" data-ipsquote-contentapp=\"forums\" data-ipsquote-contenttype=\"forums\" data-ipsquote-contentid=\"7312\" data-ipsquote-contentclass=\"forums_Topic
Esetleg ?
 

stock ConvertNonNormaQuatToEuler(Float: qw, Float: qx, Float:qy, Float:qz,
                                &Float:heading, &Float:attitude, &Float:bank)
{
    new Float: sqw = qw*qw;
    new Float: sqx = qx*qx;
    new Float: sqy = qy*qy;
    new Float: sqz = qz*qz;
    new Float: unit = sqx + sqy + sqz + sqw; // if normalised is one, otherwise is correction factor
    //a*n~ëe` normalised, - îäe`í, â i\"?îo`e`âíîi` n~ëó÷a`a* - i\"îe^a`ça`o`a*ëü e^î??a*e^öe`e`
    new Float: test = qx*qy + qz*qw;
    if (test > 0.499*unit)
    { // singularity at north pole - în~îáa*ííîn~o`ü ía` n~a*âa*?íîi` i\"îë?n~a*
        heading = 2*atan2(qx,qw);
        attitude = 3.141592653/2;
        bank = 0;
        return 1;
    }
    if (test < -0.499*unit)
    { // singularity at south pole - în~îáa*ííîn~o`ü ía` ??íîi` i\"îë?n~a*
        heading = -2*atan2(qx,qw);
        attitude = -3.141592653/2;
        bank = 0;
        return 1;
    }
    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;
}
///
GetVehicleRotation(vID, X, Y, Z);

 

és akkor ezt most hogy használjam? attol még hogy megvan a rotation nem tudom meg mi van a kocsi elõtt :P
 

Ezt nézd meg.
 
[/quote]
Ezt meg nem értem elsõ ránézésre de azér tmég egykétszer átolvasom köszi

 

SimplePortal 2.3.7 © 2008-2024, SimplePortal