tgoop.com/unsafecsharp/159
Last Update:
Нормализация векторов
Это приведение к единичному размеру, при этом направление сохраняется. Обычно мы используем для этого v.normalized
или v.Normalize()
. Второй вариант будет немного быстрее первого, т.к. мы не создаем копию вектора, а изменяем существующий.
Но как оно работает внутри? Как нетрудно догадаться из определения нормализации, чтобы привести вектор к единичному - нам нужна его длина, а длина вектора - это корень по теореме Пифагора. Поэтому если вы по какой-то причине уже получили длину вектора, то просто поделите (ну поделите, ага https://www.tgoop.com/unsafecsharp/150):
var inv_length = 1f / length;
v.x *= inv_length;
v.y *= inv_length;
И получите нормализованный вектор.
А то я часто встречаю примерно такой код в хот частях:
var length = v.magnitude;
var n = v.normalized;
Хотя на деле проще было бы просто получить длину один раз и использовать ее дважды (ну или сделать свой метод для этого).
#vector #normalize #performance
BY Unity: Всё, что вы не знали о разработке
Share with your friend now:
tgoop.com/unsafecsharp/159