Vecteurs normalisés

Habituellement, les vecteurs peuvent être utilisés dans de nombreuses situations, mais parfois vous voulez contraindre leur valeur (comme lorsque vous traitez des angles), c'est pourquoi nous les normalisons. C'est essentiellement une astuce mathématique qui est utilisée pour convertir un vecteur de longueur n en un vecteur de longueur 1, ce qui signifie que les composantes vectorielles sont normalisées entre 0 et 1. Ces vecteurs sont aussi appelés vecteurs unitaires:

Pour calculer un vecteur normalisé, nous devons d'abord avoir les composantes vectorielles originales, puis les utiliser pour obtenir la longueur du vecteur. Nous divisons ensuite chacun des composants du vecteur par cette longueur pour obtenir les composantes vectorielles normalisées qui forment le vecteur normalisé dans lequel la somme des carrés de toutes les coordonnées est égale à 1. Voici comment:

Nous prenons d'abord les coordonnées du vecteur et récupérons les composants:

vx = (x2 - x1) = (7 - 1) = 6
vy = (y2 - y1) = (4 - 1) = 3

Nous utilisons ensuite ces valeurs pour calculer la longueur du vecteur:

len = sqr(vx2 + vy2) = sqr(36 + 9) = sqr(45) = 6.708203932499369

Maintenant, cela nous donne la longueur exacte du vecteur a, donc utilisons ceci pour normaliser les deux composantes vectorielles vx et vy:

vx = (vx/len) = (6 / 6.708203932499369) = 0.8944271909999159
vy = (vy/len) = (3 / 6.708203932499369) = 0.4472135954999579
a = 1

Génial! Nous avons maintenant normalisé les composants du vecteur! Mais de quel usage pratique s'agit-il dans le contexte de GameMaker Studio 2 ? D'accord, nous allons vous donner un exemple pratique...

Dites que vous avez un jeu où le joueur doit tirer sur un ennemi et vous devez savoir combien l'objet balle doit se déplacer le long des axes x et y à chaque étape pour le frapper:

Pour cela, vous utiliserez les coordonnées du joueur et de l'ennemi pour obtenir les composantes vectorielles et la longueur, puis vous les normaliserez pour obtenir une valeur entre 0 et 1 que vous multiplierez finalement par la vitesse à laquelle vous voulez que la balle se déplace à chaque pas. Ces deux dernières valeurs seront ensuite stockées et ajoutées aux coordonnées x et y de départ à chaque étape. Son compliqué? Ce n'est pas, regardez (les valeurs ont été arrondies à une décimale pour la simplicité):

px = 100;
py = 425;
ex = 356;
ey = 83;
bullet_speed = 5;

vx = (ex - px) = 256
vy = (ey - py) = -342

len = sqrt(vx2 + vy2) = sqrt(65536 + 116964) = 427.2

vx = vx / len = 0.6
vy = vy / len = 0.8

speed_x = vx * bullet_speed = 3
speed_y = vy * bullet_speed = 4

Donc, pour frapper la cible, nous devons ajouter 3 à la coordonnée x des puces et 4 à sa coordonnée y à chaque pas.


-->