2016-06-23 2 views
0

Nous avons une cible, qui est quelque part dans le niveau, et un joueur qui peut se déplacer et peut viser n'importe où. Maintenant, nous voulons calculer la distance entre les joueurs AIM et la cible.Calculez la distance entre les joueurs AIM (xyz, pitch, lacet) et le vecteur CIBLE (xyz)

À quelle distance les joueurs visent-ils la cible? - Si cette valeur est proche de '0', nous savons que le joueur vise la cible. Nous voulons le savoir, car nous aimons calculer à quelle distance se trouvait le joueur, quand il a tiré.

L'information suivante est ce que nous avons:

  • position/coords vecteur cible (X, Y, Z).
  • Player Vecteur (X, Y, Z) position/coords.
  • Emplacement du joueur & lacet

Drawing of the Situation

+1

Je recommencerais probablement sur: http://math.stackexchange.com/ pour obtenir les équations nécessaires pour calculer le point. Une fois que vous avez cela, la conversion en javascript devrait être facile. – FrankerZ

Répondre

0

Nous avons donc défini la distance que la distance entre le point cible dans l'espace et la ligne de but. Notez que vous pouvez également définir la distance comme l'angle entre la ligne reliant le joueur et la cible et la ligne de visée.

Heureusement, c'est facile:

enter image description here

point b est la projection prepandicular du Target à la ligne aim:

t = Target - Player 
i = max(a*t/a*a, 0) (so we won't report false distances when the target is behind) 
B = Player + a * i 
distance = dist(B, Target) = len(B - Target) 

Vous pouvez calculer le vecteur a de tangage et de lacet avec certaines formules comme celles-ci:

a_x = cos(pitch) * cos(yaw) 
a_y = sin(pitch) 
a_z = cos(pitch) * sin(yaw)