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

Ако си зад уеб филтър, моля, увери се, че домейните *. kastatic.org и *. kasandbox.org са разрешени.

Основно съдържание

Големина на вектора и нормализация

Както вече видяхме, умножението и делението са начини, по които можем да променяме големината на вектора, без да променяме неговата посока. Вероятно се чудиш "Добре, как разбирам каква е големината на вектора? Знам компонентите (x и y), но колко дълга (в пиксели) е стрелката в действителност?” Разбирането на това как да изчисляваме големината (позната още като дължина) на един вектор е невероятно полезно и важно.
Фигура 1,10: Големината или "дължината" на един вектор v  често се записва като: ||v||
Забележи как в горната диаграма векторът, нарисуван като стрелка и два компонента (x и y), създава правоъгълен триъгълник. Катетите на триъгълника са компонентите, а хипотенузата е самата стрелка. Имаме голям късмет, че разполагаме с този правоъгълен триъгълник, защото едно време един гръцки математик на име Питагор открил прекрасната формула, която описва отношението между катетите и хипотенузата на правоъгълния триъгълник.
Според питагоровата теорема a на квадрат плюс b на квадрат е равно на c на квадрат.
Въоръжени с тази формула, вече можем да изчислим големината на v по следния начин:
||v||=vxvx+vyvy
И така кодът за имплементирането на обекта PVector ще бъде:
PVector.prototype.mag = function() {
    return sqrt(this.x*this.x + this.y*this.y);
};
Следващият пример визуализира големината на вектор с лента в горната част:
Изчисляването на големината на вектора е само началото. Функцията за големина отваря вратата към много възможности, първата от които е нормализацията. Нормализирането се отнася до процеса на това да направим нещо "стандартно" или, така да се каже, "нормално". В случая с векторите нека примем засега, че стандартният вектор има големина 1. Следователно, за да нормализираме един вектор, трябва да взмем вектор с произволна големина и, като запазим посоката, в която сочи, да променим големината му на 1, като по този начин го превръщаме в нещо, наречено единичен вектор.
Тъй като той описва посоката на вектора без значение от неговата големина, е полезно да имаме лесен достъп до единичния вектор. Ще видим колко полезно ще ни е, когато започнем да работим със сили в следващия раздел.
За всеки даден вектор u, неговият единичен вектор (записан като u^) се изчислява по следния начин:
u^=u||u||
С други думи, за да нормализираме един вектор, трябва само да разделим всеки компонент на неговата големина. Това е доста интуитивно. Да речем, че имаме вектор с големина 5. Добре, 5 делено на 5 е равно на 1. И така, ако разгледаме нашия правоъгълен триъгълник, трябва да скалираме хипотенузата надолу, като я разделим на 5. В този процес катетите намаляват, тъй като и те се разделят на 5.
Затова в PVector обекта пишем нашата функция за нормализация, както следва:
PVector.prototype.normalize = function() {
  var m = this.mag();
  this.div(m);
};
Разбира се, има един малък проблем. Ами ако си представим, че големината на вектора е 0? Не можем да делим на 0! Една бърза проверка за грешка ще поправи това на момента:
PVector.prototype.normalize = function() {
  var m = this.mag();
  if (m > 0) {
    this.div(m);
  }
};
Ето една програма, в която винаги нормализираме вектора, който представлява позицията на мишката от центъра (а след това го умножаваме, аз да можем да го видим, тъй като е дълъг само 1 пиксел!):

Курсът "Компютърни симулации на физични явления" е производeн на "Природата на кода" от Даниел Шифман, използвана от Creative Commons Attribution-NonCommercial 3,0 Unported License.

Искаш ли да се присъединиш към разговора?

Все още няма публикации.
Разбираш ли английски? Натисни тук, за да видиш още дискусии в английския сайт на Кан Академия.