Расчет скорости пули

Мне нужно рассчитать X и Y скорость для пули (пуля будет перемещать каждое "обновление" по этим), поэтому у меня есть следующие

public int[] getXandYSpeed(int pointOfOriginX, int pointOfOriginY, int aimToX, int aimToY){
  int[] coords = new int[2];
  aimToX = aimToX - pointOfOriginX;
  aimToY = aimToY - pointOfOriginY;

  while((aimToX + aimToY) > 5){
    aimToX = aimToX/2;
    aimToY = aimToY/2;
  }

  coords[0] = aimToX;
  coords[1] = aimToY;
  return coords;

Но, это не совсем точно, и пуля имеет случайную скорость (если final в последнем цикле - aimToX плюс AimToY равно 6, поэтому (каждый равен 3), поэтому конечная скорость будет x=1 и y=1, а если последний цикл равен четырем чем это закончится как х =2 и у =2, и это имеет значение)

Итак, вопрос в том, как сделать это лучше?

1 ответ

Решение

Если вы хотите, чтобы пуля двигалась с постоянной скоростью под любым углом, вам действительно нужно нечто подобное. Также заметны комментарии об использовании double из @JSlain, они будут намного более точными, даже если вам придется округлять значения при рисовании / рендеринге маркера.

public double[] getSpeed(int sx, int sy, int ex, int ey)
{
    double dx = ex - sx;
    double dy = ey - sy;

    double theta = Math.atan2(dy, dx); //get the angle your bullet will travel

    int bulletSpeed = 5; //how fast your bullet can go.

    double[] speeds = new double[2];

    speeds[0] = Math.cos(theta) * bulletSpeed;
    speeds[1] = Math.sin(theta) * bulletSpeed;

    return speeds;
}
Другие вопросы по тегам