dot_product_3d

Syntaxe:

dot_product_3d(x1, y1, z1, x2, y2, z2)


Argument La description
x1 La coordonnée x du premier vecteur.
y1 La coordonnée y du premier vecteur.
z1 La coordonnée z du premier vecteur.
x2 La coordonnée x du deuxième vecteur.
y2 La coordonnée y du second vecteur.
z2 La coordonnée z du deuxième vecteur.


Retours: Real


La description

Le produit scalaire est une valeur exprimant la relation angulaire entre deux vecteurs et se trouve en prenant deux vecteurs, en les multipliant ensemble et en ajoutant ensuite les résultats. Le nom "produit scalaire" est dérivé du point centré "·" qui est souvent utilisé pour désigner cette opération (le nom alternatif "produit scalaire" met l'accent sur la nature scalaire plutôt que sur la nature vectorielle du résultat).

La formule mathématique réelle peut être écrite comme ceci:


En 2D, le produit scalaire des vecteurs a [x1, y1] et b [x2, y2] est x1x2 + y1y2, donc en 3D, le produit scalaire des vecteurs a [x1, y1, z1] et b [x1, y1, z1] est x1x2 + y1y2 + z1z2. Ainsi, le dot_product_3d dans GameMaker Studio 2 est calculé comme GameMaker Studio 2:

a · b = (x1*x2) + (y1*y2) + (z1*z2);

La chose curieuse à propos du produit scalaire est la relation qu'il a avec l'angle formé par les vecteurs d'entrée qui peuvent être exprimés comme:

a · b = (length of a) * (length of b) * cos(angle)

C'est-à-dire que le produit scalaire de deux vecteurs sera égal au cosinus de l'angle entre ces vecteurs, multiplié par les longueurs de chacun d'eux. Voici une image pour illustrer:

Il y a quelques choses que nous pouvons maintenant énoncer à partir de deux vecteurs quelconques en relation avec le résultat de leur produit scalaire:

Alors qu'est-ce que cela signifie pour ceux d'entre nous qui font des jeux? Bien, cette relation mathématique peut être utilisée dans un certain nombre de circonstances, mais la meilleure façon de le voir est de construire un scénario réel et de voir par vous-même ce qui se passe. L'un des moyens les plus simples de le faire est de générer un simple "contrôle de hauteur" pour un ennemi, disons un jeu de plateforme, afin que l'ennemi "voie" le joueur s'il est au dessus du plan formé par le vecteur normal ennemi. le 3ème étage.

Fondamentalement, nous obtenons le vecteur normal de l'ennemi perpendiculaire au sol et ensuite nous obtenons le vecteur du joueur à l'ennemi. Nous obtiendrons alors le dot_product de ces vecteurs, et si le résultat est positif le joueur est "au-dessus" du plan de sol ennemi et s'il est négatif il est en dessous. Le code réel pour obtenir ce travail est fourni dans l'exemple ci-dessous.


Exemple:

var x1, y1, x2, y2;
x1 = 0;
y1 = 1;
z1 = 0;
x2 = o_Player.x - x;
y2 = o_Player.y - y;
z2 = o_Player.z - z; if dot_product_3d(x1, y1, z1, x2, y2, z2) > 0 above=true else above=false;

Le code ci-dessus crée un vecteur normal le long de l'axe y (up), puis récupère le vecteur de l'objet joueur "o_Player" sur lui-même. Finalement, il calcule le produit scalaire de ces deux vecteurs et s'il est supérieur à tan 0, il met la variable "above" à true, et s'il est inférieur ou égal à 0, il le met à "false".