If you're seeing this message, it means we're having trouble loading external resources on our website.

Ha webszűrőt használsz, győződj meg róla, hogy a *.kastatic.org és a *.kasandbox.org nincsenek blokkolva.

Fő tartalom

Vektor hossza és a normalizálás

Ahogy láttuk, szorzással és osztással megváltoztathatjuk a vektor hosszát anélkül, hogy annak iránya megváltozna. Eltűnődhetsz azon, hogy „OK, akkor honnan tudom, milyen hosszú egy vektor? Ismerem a vektor x és y komponenseit, de milyen hosszú (hány pixel) az adott nyíl?” Nagyon hasznos és fontos tudni, hogyan kell kiszámolni a vektor hosszát (más néven magnitúdóját).
1,10. ábra A v vektor hosszát, illetve „nagyságát" gyakran így jelölik: ||v||
Figyeld meg a fenti ábrán, hogy a vektor, amit egy nyíllal és az x és y komponensekkel ábrázoltunk, egy derékszögű háromszöget alkot! A befogók a komponensek, és az átfogó maga a nyíl. Nagy szerencsénk van a derékszögű háromszöggel, mert valamikor réges-régen, egy Pitagorasz nevű görög matematikus kidolgozott egy klassz képletet, ami a derékszögű háromszög befogói és átfogója közötti kapcsolatot írja le.
A pitagorasz tétel kimondja: a négyzet plusz b négyzet egyenlő c négyzettel.
Ennek a képletnek a birtokában ki tudjuk számítani a v nagyságát az alábbiak szerint:
||v||=vxvx+vyvy
A PVector objektumban ez így van megvalósítva:
PVector.prototype.mag = function() {
    return sqrt(this.x*this.x + this.y*this.y);
};
A következő példában a rajzvászon tetején egy vízszintes oszloppal jelenítjük meg a vektor nagyságát. (A programban található megjegyzések: 1. sor: Dan Shiffman, natureofcode.com példája alapján; 7-8. sor: Két PVector, egy az egér helyzetéhez és egy az ablak középpontjához; 11. sor: PVector kivonás! 18. sor: Megrajzoljuk a vektort megjelenítő vonalat.)
A vektor hosszának kiszámítása csak a kezdet. A hosszát visszaadó függvény (magnitude) számos új utat nyit meg előttünk, ezek közül az első a normalizálás. A normalizálás azt jelenti, hogy valamit „egységesítünk”, azaz „normalizálunk”. Vektorok esetében tételezzük most fel, hogy a normalizált vektor hossza 1. Ekkor a vektor normalizálása azt jelenti, hogy veszünk egy tetszőleges hosszúságú vektort, és az irányát változatlanul hagyva a hosszát 1-re változtatjuk, az így keletkező vektort egységvektornak hívjuk.
Mivel az egységvektor a vektor irányát annak hosszától függetlenül írja le, hasznos lesz, ha kéznél van. Majd a következő részben meglátjuk, milyen jól is fog ez jönni, amikor az erőkkel foglalkozunk.
Bármelyik u vektor esetében az egységvektor (aminek a jele u^) számítása:
u^=u||u||
Más szóval a vektor normalizálásához a vektor minden egyes komponensét el kell osztani annak hosszával. Ez eléggé kézenfekvő. Tegyük fel, hogy egy vektor hossza 5. Nos, 5 osztva 5-tel egyenlő 1. Ha ránézünk a derékszögű háromszögünkre, akkor az átfogót le kell csökkentenünk úgy, hogy elosztjuk 5-tel. Ezáltal a befogók is ötödükre mennek össze.
A PVector objektumban a normalizáló függvényt így írtuk meg:
PVector.prototype.normalize = function() {
  var m = this.mag();
  this.div(m);
};
Persze van egy kis gond. Mi van akkor, ha a vektor hossza 0? Nem oszthatunk 0-val! Egy gyors hibaellenőrzés ezt kiküszöböli:
PVector.prototype.normalize = function() {
  var m = this.mag();
  if (m > 0) {
    this.div(m);
  }
};
Az alábbi program az egérnek a középponthoz viszonyított helyzetét kifejező vektort mindig normalizálja (majd megszorozza azt, hogy látni lehessen, mert egy pixel az nagyon pici!). (A programban található megjegyzések: 1. sor: Dan Shiffman, natureofcode.com példája alapján; 6-7. sor: Két PVector, egy az egér helyzetéhez és egy az ablak középpontjához; 10. sor: PVector kivonás! 13. sor: Ebben a példában a vektor normalizálása után megszorozzuk 50-nel, hogy látszódjon a rajzvásznon. Figyeld meg, hogy bárhol is van az egér, a vektor mindig ugyanolyan hosszú (50) a normalizálásnak köszönhetően! 17. sor: Megrajzoljuk a vektort jelző vonalat).

Ez a „Természetes szimulációk" tananyag a Daniel Shiffman által készített „The Nature of Code” alapján készült, a Creative Commons Attribution-NonCommercial 3.0 Unported License szerint.

Szeretnél részt venni a beszélgetésben?

Még nincs hozzászólás.
Tudsz angolul? Kattints ide, ha meg szeretnéd nézni, milyen beszélgetések folynak a Khan Academy angol nyelvű oldalán.