Szerző Téma: Hogyan mûködik a sebességmérõ?  (Megtekintve 3096 alkalommal)

Nem elérhető krisk

  • 2380
    • Profil megtekintése
Hogyan mûködik a sebességmérõ?
« Dátum: 2012. július 01. - 13:06:18 »
+5 Show voters
Üdv!
Ezt a tutorialt azért csináltam, mert sokan nincsenek tisztában vele, hogyan épül fel egy sebességmérõ script. Márpedig nem is olyan bonyorult, csak egy kis geometria, meg egy kis scriptelés kell, hogy a sajátodat megcsináld.
Cél:
 
  • Megérteni, hogyan mûködik egy sebességmérõ rendszer.

Nézzük:
 

CMD:getspeed(playerid, params[]) {
   new Float:vVectors[4], string[30];
   GetVehicleVelocity(GetPlayerVehicleID(playerid),vVectors[0],vVectors[1],vVectors[2]);
   vVectors[3] = floatround(floatsqroot((vVectors[0]^2)+(vVectors[1]^2)+(vVectors[2]^2))*136.666667);
   format(string,sizeof(string),\"A jármû sebessége: %i km/h\",vVectors[3]);
   SendClientMessage(playerid,0xFFFFFFFF,string);
   return 1;
}

 
Ez a script kiírja az adott sebességet amivel haladsz km/h-ban. Mit is csinál ez a script?
A GetVehicleVelocity függvény megad 3 sebességvektort: az j-t, ami az origóból (játékos) az x vektor mentén fut, a k-t, ami az y, és a l-t, ami a z mentén fut. A végleges sebességvektor legyen m.
A vektorok nagyságának összeadására szolgál az úgynevezett Euklidészi norma. Az Euklidészi norma kimondja, hogy egy n dimenziós térben a k vektor távolsága megegyezik a k vektor n számú \"komponenseinek\" négyzetösszegének négyzetgyökével. Mivel minden vektornak egy komponense van minden dimenzióban, ezért egyértelmû hogy a komponensek száma és a dimenzió megegyezik. A komponensek gyakorlatilag azt mutatják meg, hogy milyen x, ill y, z, etc... tengelybeli pontokkal lehet meghatározni a vektor \"hegyét\".
Példaként tegyük fel, hogy egy két dimenziós vektorunk van, aminek komponensei 5 és 2. Ezért a  két dimenziós vektor \"nyilának\" végpontja 5 és 2, egyszerûbben fogalmazva a vektor hegyének helye a koordináta-rendszerben (5;2). Tehát x=5, y=2. Ebben az esetben a végleges m vektor hossza:
|m| = sqrt(5^2+2^2)
ahol sqrt a négyzetgyökvonás, ^ a négyzetre emelés jele. Ezt tekinthetjük úgy is, mint két darab egy dimenziós vektor távolságának összeadását, mely egyik irányban az x irányban 5-öt, míg az y irányban 2-t haladt, majd a vektorkomponensek nyilait \"összekötjük\", így megkapva az m vektort. Ez a magyarázat teljesen azonos a fent említettel, hiszen amikor megkapjuk az (5;2) pontot, gyakorlatilag elmegyünk ötig (1 dimenziós x komponens), elmegyünk 2-ig (1 dimenziós y komponens), majd a kettõt összekötjük a találkozásnál. A kettõ megfogalmazás tehát analogikus. A vektor iránya egyébként lényegtelen, a sebességnél csak a vektor távolsága számít.
A sebességvektor a gyakorlati példában három dimenziós, hiszen egy 3D játékról beszélünk. A három dimenziós vektornak három darab egy dimenziós komponense van, egy az x, egy az y, egy a z irányban. Ahhoz, hogy a sebességet megkapjuk meg kell tudni a vektor normáját.
Tegyük fel, hogy a vektor egyes komponenseinek hossza x irányban 5, y irányban 3, z irányban 0.5, tehát egy olyan vektor hosszát kapjuk meg, aminek a \"hegye\" az (5;3;0.5) koordinátáknál helyezkedik el. Ebbõl egy három dimenziós vektort kaphatunk, és a sebességet megkaphatjuk, ha kiszámítjuk a vektor normáját:
|m| = sqrt((5^2)+(3^2)+(0.5^2)) = 5.85234996 valami hossz/valami idõ.
Elnézést kérek, fogalmam sincs, hogy mibe kapjuk meg az eredményt. Azt viszont tudom, hogyha megszorozzuk 136.66666-tal, megkapjuk a sebességet km/h-ban. Tehát:
sebesség = 5.85234996 * (136 + (2 / 3)) = 799.821161
A test 800 km/h-val halad.
Innentõl már csak kerekíteni kell, és megkapjuk a sebességet egész számban.
« Utoljára szerkesztve: 2012. július 10. - 08:54:38 írta krisk »

Hogyan mûködik a sebességmérõ?
« Válasz #1 Dátum: 2012. július 01. - 13:34:14 »
0 Show voters
Kezdem érteni..  ;D
Megjegyzés: a legtöbb szerveren 160as szorzást használnak.

Nem elérhető instant

  • 2778
  • ZzzzzZ
    • Profil megtekintése
Hogyan mûködik a sebességmérõ?
« Válasz #2 Dátum: 2012. július 02. - 06:55:05 »
0 Show voters
Szép leírás lett!
És sokat fog segíteni nekem ez a leírás

Hogyan mûködik a sebességmérõ?
« Válasz #3 Dátum: 2012. július 15. - 18:49:47 »
0 Show voters
Hali,
Csináltam egy GetVehicleSpeed funkciót de Tag Mismatch warningokat ír ki rá.
 

stock GetVehicleSpeed(vehicleid)
{
new Float:vVectors[3];
      GetVehicleVelocity(vehicleid,vVectors[0],vVectors[1],vVectors[2]);
return floatround(floatsqroot((vVectors[0]^2)+(vVectors[1]^2)+(vVectors[2]^2))*136.666667);
}

Nem elérhető DrAkE

  • 2078
    • Profil megtekintése
Hogyan mûködik a sebességmérõ?
« Válasz #4 Dátum: 2012. július 15. - 20:20:15 »
+1 Show voters
Idézetet írta: 1ST_Chr date=1342370987\" data-ipsquote-contentapp=\"forums\" data-ipsquote-contenttype=\"forums\" data-ipsquote-contentid=\"23587\" data-ipsquote-contentclass=\"forums_Topic
Hali,
Csináltam egy GetVehicleSpeed funkciót de Tag Mismatch warningokat ír ki rá.
 

stock GetVehicleSpeed(vehicleid)
{
new Float:vVectors[3];
      GetVehicleVelocity(vehicleid,vVectors[0],vVectors[1],vVectors[2]);
return floatround(floatsqroot((vVectors[0]^2)+(vVectors[1]^2)+(vVectors[2]^2))*136.666667);
}

 



stock GetVehicleSpeed(vehicleid)
{
new Float:vVectors[3];
      GetVehicleVelocity(vehicleid,vVectors[0],vVectors[1],vVectors[2]);
return floatround(floatsqroot((vVectors[0]*vVectors[0])+(vVectors[1]*vVectors[1])+(vVectors[2]*vVectors[2]))*136.666667);
}

Hogyan mûködik a sebességmérõ?
« Válasz #5 Dátum: 2012. július 15. - 20:29:04 »
0 Show voters
Idézetet írta: DrAkE date=1342376415\" data-ipsquote-contentapp=\"forums\" data-ipsquote-contenttype=\"forums\" data-ipsquote-contentid=\"23587\" data-ipsquote-contentclass=\"forums_Topic


stock GetVehicleSpeed(vehicleid)
{
new Float:vVectors[3];
      GetVehicleVelocity(vehicleid,vVectors[0],vVectors[1],vVectors[2]);
return floatround(floatsqroot((vVectors[0]*vVectors[0])+(vVectors[1]*vVectors[1])+(vVectors[2]*vVectors[2]))*136.666667);
}

 

Köszi, nem tudtam mi az a ^2 de mostmár tudom, az a hatvány :D

Nem elérhető Spedy

  • 227
    • Profil megtekintése
Hogyan mûködik a sebességmérõ?
« Válasz #6 Dátum: 2012. július 28. - 14:27:37 »
0 Show voters
Jó leirás!

Hogyan mûködik a sebességmérõ?
« Válasz #7 Dátum: 2012. július 29. - 10:46:11 »
0 Show voters
Idézetet írta: ZzzzzZ date=1341204905\" data-ipsquote-contentapp=\"forums\" data-ipsquote-contenttype=\"forums\" data-ipsquote-contentid=\"23587\" data-ipsquote-contentclass=\"forums_Topic
Szép leírás lett!
És sokat fog segíteni nekem ez a leírás
 

 

SimplePortal 2.3.7 © 2008-2024, SimplePortal