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

Jeżeli jesteś za filtrem sieci web, prosimy, upewnij się, że domeny *.kastatic.org i *.kasandbox.org są odblokowane.

Główna zawartość

Długość i normalizacja wektora

Mnożenie i dzielenie to sposoby na zmianę długości wektora bez zmiany kierunku, co mieliśmy okazję przed chwilą zaobserwować. Może zastanawiacie się “Ok, to w takim razie skąd wiem jak długi jest wektor? Znam współrzędne (x i y), ale jak długa (w pikselach) jest sama strzałka?” Zrozumienie sposobu na obliczanie długości(nazywanej też wartością) wektora jest bardzo przydatne i ważne.
Rysunek 1.10: Długość lub „wartość” wektora v  jest często zapisywana jako: ||v||
Zauważcie to, że na powyższym wykresie mamy trójkąt prostokątny utworzony z wektora, narysowanego jako strzałki i dwóch współrzędnych (x i y). Boki są współrzędnymi a przeciwprostokątna to strzałka. Całe szczęście, że jest to trójkąt prostokątny, ponieważ dawno temu pewien grecki matematyk Pitagoras opracował wspaniały wzór opisujący zależność pomiędzy bokami a przeciwprostokątną trójkąta prostokątnego.
Twierdzenie Pitagorasa mówi, że wartość boku a podniesiona do kwadratu i wartość boku b podniesiona do kwadratu równa jest wartości c podniesionej do kwadratu.
Za pomocą tego wzoru możemy obliczyć wartość v w następujący sposób:
||v||=vxvx+vyvy
Kod pozwalający na implementację tego w obiekcie PVector wygląda tak:
PVector.prototype.mag = function() {
  return sqrt(this.x*this.x + this.y*this.y);
};
Poniższy przykład ukazuje wartość wektora z paskiem na górze:
Obliczanie wartości wektora to dopiero początek. Funkcja obliczająca wartość daje nam dostęp do wielu możliwości. W pierwszej kolejności omówimy normalizację. Normalizacja to proces przerabiania czegoś do postaci “standardowej” albo po prostu “normalnej.” W przypadku wektorów załóżmy, że standardowy wektor ma długość równą 1. Normalizacja wektora polega na wzięciu wektora o dowolnej długości, zachować kierunek w który jest zwrócony i zmienić jego długość na 1, zamieniając go w tak zwany wektor jednostkowy.
Skoro opisuje on kierunek wektora niezależnie od jego długości, warto, aby wektory jednostkowe były łatwo dostępne. Okaże się to bardzo przydatne gdy zaczniemy pracować z siłami w następnym rozdziale.
Dla dowolnego wektora u, jego wektor jednostkowy (zapisywany jako u^) jest obliczany w sposób następujący:
u^=u||u||
Innymi słowy normalizacja wektora polega po prostu na podzieleniu współrzędnych przez wartość. To całkiem intuicyjne. Powiedzmy, że wektor ma długość 5. Cóż, 5 podzielone przez 5 daje 1. Tak więc patrząc na nasz trójkąt prostokątny, musimy zredukować przeciwprostokątną dzieląc przez 5. W trakcie tej operacji boki również się zmniejszą, bo także zostaną podzielone przez 5.
W naszym obiekcie PVector umieścimy więc następującą funkcję normalizującą:
PVector.prototype.normalize = function() {
  var m = this.mag();
  this.div(m);
};
Oczywiście istnieje pewien drobny problem. Co się stanie, jeżeli wielkość wektora wynosi 0? Nie możemy dzielić przez 0! Szybkie sprawdzanie błędu powinno to naprawić:
PVector.prototype.normalize = function() {
  var m = this.mag();
  if (m > 0) {
    this.div(m);
  }
};
Oto program który zawsze znormalizuje wektor który przedstawia pozycję myszki od środka (po czym pomnoży ją, abyśmy mogli ją zobaczyć - w końcu 1 piksel nie jest wcale duży!):

Ten kurs "Symulacje Natury" jest pochodną z "Natury Kodu " stworzonej przez Daniela Shiffmana, użytej pod licencją Creative Commons Attribution-NonCommercial 3.0 Unported License.

Chcesz dołączyć do dyskusji?

Na razie brak głosów w dyskusji
Rozumiesz angielski? Kliknij tutaj, aby zobaczyć więcej dyskusji na angielskiej wersji strony Khan Academy.