Основно съдържание
Курс: Програмиране > Раздел 5
Урок 4: Вектори- Въведение във вектори
- Предизвикателство: Пешеходец по вектор
- Повече векторна математика
- Предизвикателство: Лазерен меч
- Големина на вектора и нормализация
- Предизвикателство: Визуализация на големина
- Движение на вектор
- Предизвикателство: Спиране на кола
- Статични функции срещу методи
- Предизвикателство: Статични функции
- Интерактивно движение на вектор
- Предизвикателство: Следене на мишката
- Проект: Изчислителни същества
© 2024 Khan AcademyУсловия за ползванеДекларация за поверителностПолитика за Бисквитки
Големина на вектора и нормализация
Както вече видяхме, умножението и делението са начини, по които можем да променяме големината на вектора, без да променяме неговата посока. Вероятно се чудиш "Добре, как разбирам каква е големината на вектора? Знам компонентите (
x
и y
), но колко дълга (в пиксели) е стрелката в действителност?” Разбирането на това как да изчисляваме големината (позната още като дължина) на един вектор е невероятно полезно и важно.Забележи как в горната диаграма векторът, нарисуван като стрелка и два компонента (
x
и y
), създава правоъгълен триъгълник. Катетите на триъгълника са компонентите, а хипотенузата е самата стрелка. Имаме голям късмет, че разполагаме с този правоъгълен триъгълник, защото едно време един гръцки математик на име Питагор открил прекрасната формула, която описва отношението между катетите и хипотенузата на правоъгълния триъгълник.Според питагоровата теорема на квадрат плюс на квадрат е равно на на квадрат.
Въоръжени с тази формула, вече можем да изчислим големината на по следния начин:
И така кодът за имплементирането на обекта
PVector
ще бъде:PVector.prototype.mag = function() {
return sqrt(this.x*this.x + this.y*this.y);
};
Следващият пример визуализира големината на вектор с лента в горната част:
Изчисляването на големината на вектора е само началото. Функцията за големина отваря вратата към много възможности, първата от които е нормализацията. Нормализирането се отнася до процеса на това да направим нещо "стандартно" или, така да се каже, "нормално". В случая с векторите нека примем засега, че стандартният вектор има големина 1. Следователно, за да нормализираме един вектор, трябва да взмем вектор с произволна големина и, като запазим посоката, в която сочи, да променим големината му на 1, като по този начин го превръщаме в нещо, наречено единичен вектор.
Тъй като той описва посоката на вектора без значение от неговата големина, е полезно да имаме лесен достъп до единичния вектор. Ще видим колко полезно ще ни е, когато започнем да работим със сили в следващия раздел.
За всеки даден вектор , неговият единичен вектор (записан като ) се изчислява по следния начин:
С други думи, за да нормализираме един вектор, трябва само да разделим всеки компонент на неговата големина. Това е доста интуитивно. Да речем, че имаме вектор с големина 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.
Искаш ли да се присъединиш към разговора?
Все още няма публикации.