алгоритм расчета скорости - PullRequest
1 голос
/ 23 июня 2011

Это, наверное, очень глупый математический вопрос, но я не могу понять это.У меня есть круг в точке А, на котором я могу щелкнуть мышью и вытащить из него мышку.Когда мышь отпущена, точка выброса B считается целевой точкой, и мяч должен двигаться в этом направлении.То, что я делаю сейчас, выглядит примерно так:

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

Это позволяет мне использовать разные скорости «выстрела» по мере удаления мыши от круга.Но теперь я понял, что мне не нравится эта идея, и вместо этого я хочу сделать это следующим образом:

  • , чтобы иметь минимальную и максимальную скорость (пикселей на кадр анимации)
  • чтобы выбрать скорость из этого интервала до выстрела
  • , чтобы использовать точку B просто для облегчения наведения.Скорость выстрела предварительно выбрана, и она не должна зависеть от того, как далеко отпущена мышьи выбранная скорость) установить скорости x и y для круга с учетом направления выстрела?

Ответы [ 2 ]

2 голосов
/ 23 июня 2011

Я могу придумать два способа сделать это.

Допустим, угол от a до b равен T. Тогда:

T равно atan ((by-ay) /(bx-ax))

зная T, вы можете рассчитать скорости x и y:

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

Тодолжно работать.

Чтобы ускорить процесс, вы можете вычислить cos (T) и sin (T) напрямую.

sin (T) дает соотношение y / h, где h - длиналиния между а и б.

Мы можем вычислить h, используя теорему Пифагора:

h = sqrt ((by-ay) ^ 2 + (bx-axe) ^ 2)

из этого мыможет выводить формулы для Vx и Vy

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

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

Это, вероятно, будет быстрее, особенно если у вас есть встроенная функция теоремы Пифагора.

1 голос
/ 23 июня 2011

Просто нормализуйте вектор от центра круга к точке и затем умножьте на желаемую скорость.В любой векторной библиотеке goodl есть такая функция, но для пояснения:

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...