2011-06-23 10 views
1

C'est probablement une question mathématique très stupide, mais je n'arrive pas à la comprendre. Ce que j'ai, c'est un cercle au point A sur lequel je peux cliquer et faire glisser la souris oway. Lorsque la souris est relâchée - le point de largage B est considéré comme un point cible et la balle doit se déplacer dans cette direction. Ce que je fais est maintenant quelque chose comme ceci:algorithme de calcul de la vitesse

velocityX = (b.x - a.x)/somenumber 
velocityY = (b.y - a.y)/somenumber 

Cela me permet d'utiliser différents « shot » accélère le plus loin de la souris est libéré du cercle. Mais maintenant, je réalisais que je n'aime pas cette idée et à la place que je veux le faire de la façon suivante:

  • d'avoir une vitesse minimale et maximale (pixels par image d'animation)
  • pour sélectionner la vitesse de cet intervalle avant le tir
  • pour utiliser le point B simplement pour un ciblage plus facile. La vitesse de prise de vue est présélectionné et should't dépendent de la distance de la souris est relâché

Je sais qu'il devrait être mort simple, mais comment puis-je (savoir le point A et B les coordonnées, min, max et vitesse sélectionnée) définit les vitesses x et y du cercle en tenant compte de la direction du tir?

Répondre

1

Juste normaliser le vecteur du centre du cercle au point, puis multipliez par la vitesse que vous voulez. Dans toute bonne bibliothèque de vecteurs, il existe une telle fonction, mais juste pour clarifier:

length=square_root((b.x - a.x)^2+(b.y - a.y)^2) 
velocityX = (b.x - a.x)/length * speed 
velocityY = (b.y - a.y)/length * speed 
+0

Merci beaucoup - fonctionne comme un charme! – Marius

2

Je peux penser à deux façons de le faire.

permet de dire l'angle de a à b est T. Puis:

T est égale à atan ((par-ay)/(bx-hache))

savoir T vous pouvez calculer le x et les vitesses y:

Vx = cos (T) V Vy = sin (T) V

Cela devrait fonctionner. Pour accélérer les choses, vous pouvez calculer cos (T) et sin (T) directement. Sin (T) donne la proportion y/h, où h est la longueur de la ligne entre a et b.

Nous pouvons calculer h en utilisant le théorème de Pythagore:

h = sqrt ((par ay)^2 + (bx-hache)^2)

de ce que nous pouvons déduire des formules pour Vx et Vy

Vx = V * (bx-ax)/sqrt ((by-ay)^2 + (bx-ax)^2)

Vy = V * (bx-ax)/sqrt ((par-ay)^2 + (bx-ax)^2)

C'est probablement plus rapide, partic surtout si vous avez une fonction de théorème de Pythagore construite.

+0

Merci pour l'explication – Marius

Questions connexes