Как говорит Джон Д. Кук - в основном вы делаете это, потому что заботитесь о направлении, а не о самом векторе.В зависимости от контекста, вы, скорее всего, не хотите / не нуждаетесь в информации о величине - только само направление.Вы нормализуете, чтобы убрать величину, чтобы она не искажала другие вычисления, что, в свою очередь, упрощает многие другие вещи.
С точки зрения ИИ - представьте, что вы берете вектор V между P1 (плохой парень ИИ)и P2 (ваш герой) как направление для плохого парня.Вы хотите, чтобы плохой парень двигался со скоростью N за удар - как вы рассчитываете это?Что ж, мы либо нормализуем вектор для каждого удара, умножаем на N, чтобы выяснить, как далеко они продвинулись, либо мы предварительно нормализуем направление в первую очередь, и просто умножаем вектор единицы на N каждый раз, иначе плохой парень будет двигатьсядальше, если бы он был дальше от героя!Если герой не меняет позицию, это еще один расчет для беспокойства.
В этом контексте это не имеет большого значения - но что, если у вас есть сто плохих парней?Или тысяча?Что если вашему ИИ нужно иметь дело с комбинациями плохих парней?Внезапно это сотня или тысяча нормализаций, которые вы сохраняете за удар.Так как это несколько умножений и квадратный корень для каждого, в конечном итоге вы достигнете точки, в которой преждевременная нормализация данных означает, что вы собираетесь убить скорость обработки ИИ.
В более широком смысле - математика для этого действительно распространена - люди делают здесь то, что они делают для таких вещей, как 3D-рендеринг - если бы вы не унифицировали, например, нормали для ваших поверхностей, вы бы потенциально моглитысячи нормализаций на рендеринг, которые совершенно не нужны.У вас есть два варианта: один - заставить каждую функцию выполнять вычисления, или два - предварительно нормализовать данные.
С точки зрения дизайнера фреймворка: последний по своей природе быстрее - если мы примем первый, даже если ваш пользователь думает нормализовать данные, ему придется пройти ту же процедуру нормализации ИЛИ вы 'Мы собираемся предоставить две версии каждой функции, что является головной болью.Но в тот момент, когда вы заставляете людей задуматься о том, какую версию функции вызывать, вы также можете заставить их думать достаточно, чтобы вызывать правильную, и только предоставлять ее в первую очередь, заставляя их делать правильные вещи для производительности.,