Come dice John D. Cook - principalmente lo stai facendo perché ti interessa la direzione, non il vettore stesso.A seconda del contesto, è molto probabile che tu non voglia/abbia bisogno delle informazioni sulla magnitudine - solo la direzione stessa. Si normalizza per rimuovere la magnitudine in modo che non altera altri calcoli, il che a sua volta semplifica molte altre cose.
In termini di intelligenza artificiale - immagina di prendere il vettore V tra P1 (il cattivo cattivo dell'IA) e P2 (il tuo eroe) come la direzione da spostare del cattivo. Vuoi che il cattivo si muova ad una velocità N per battito - come lo calcoli? Bene, normalizziamo il vettore a ogni battito, moltiplichiamo per N per capire fino a che punto si muovono, o pre-normalizziamo la direzione in primo luogo, e moltiplichiamo il vettore unitario per N ogni volta - altrimenti il cattivo si muoverà inoltre se fosse più lontano dall'eroe! Se l'eroe non cambia posizione, questo è un calcolo in meno di cui preoccuparsi.
In questo contesto, non è un grosso problema - ma cosa succede se si dispone di un centinaio di cattivi? O mille? Cosa succede se la tua IA ha bisogno di affrontare combinazioni di cattivi? All'improvviso ci sono centomila normalizzazioni che stai risparmiando per battito. Poiché questa è una manciata di moltiplicatori e una radice quadrata per ognuno, alla fine si raggiunge il punto in cui non normalizzare i dati prima del tempo significa che si sta per uccidere la velocità di elaborazione dell'IA.
Più in generale, la matematica per questo è molto comune - le persone stanno facendo qui quello che fanno per cose come il rendering 3D - se non hai unito, ad esempio, le normali per le tue superfici, avresti potenzialmente migliaia di normalizzazioni per rendering che sono completamente inutili. Sono disponibili due opzioni: una: ciascuna funzione esegue il calcolo o due - pre-normalizza i dati.
Dal punto di vista del progettista di quadri: quest'ultimo è intrinsecamente più veloce - se assumiamo il primo, anche se il tuo utente pensa di normalizzare i dati, dovrà passare attraverso la stessa routine di normalizzazione O stai andando avere due versioni di ciascuna funzione, che è un mal di testa. Ma al punto che stai facendo riflettere sulla versione della funzione da chiamare, puoi anche far sì che pensino abbastanza da chiamare quella corretta e, in primo luogo, fornirla, facendo in modo che facciano la cosa giusta per le prestazioni .
Credo che sia necessario normalizzare il quaternion per la rotazione. –
@afriza: un quaternion è una bestia diversa da un vettore unitario, tuttavia hai ragione che il set di quaternioni di unità ti fornisce l'insieme di tutte le rotazioni – zebrabox