Рассчитать угол досягаемости снаряда с учетом скорости и расстояния - PullRequest
0 голосов
/ 09 ноября 2018

Я пытался реализовать движение снаряда в Javascript, и я застрял в определении угла (из которого можно получить скорость x и y)

var v = 1;
var d = 10;
var g = -1;
var angle = 0.5 * Math.asin((g*d)/(v*v));

Я бы ожидал, что что-то подобное сработает, так как оно идет отсюда Здесь .
Кажется, я получаю значения NaN или очень маленькое число.

Чтобы дать немного больше контекста; Снаряд должен пройти из точки A в точку B (в моем коде расстояние d), где A и B находятся на одной высоте. Позже я хотел бы немного рандомизировать расстояние и угол, но я предполагаю, что это не будет проблемой, как только эта проблема угла будет решена.

EDIT:
Что касается лучшего примера:

var v = 100;
var d = 100;
var g = 1;  // I've made this positive now
var angle = 0.5 * Math.asin((g*d)/(v*v));

Это говорит о том, что угол теперь составляет 0,005

Ответы [ 2 ]

0 голосов
/ 09 ноября 2018

Заметка с той же страницы википедии, на которую вы ссылались d_max = v*v/g. Учитывая ваши входные данные, это оценивается как 1. Поэтому расстояние 10 невозможно.

Еще один способ заметить, что диапазон греха (-1,1). Поэтому asin любого числа вне этого диапазона не определено. (g*d)/(v*v) равно 10, поэтому Math.asin возвращает NaN

0 голосов
/ 09 ноября 2018

Я не очень хорош в этой проблеме физики, но я попробую

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/asin

  • аргумент для Math.asin () должен быть между -1 и 1. В противном случае он возвращает NaN
  • из вашего примера вы запускаете Math.asin(-10/1) возможно, скорость имеет максимальное расстояние, которое она может преодолеть. Независимо от угла, 1 м / с не будет достигать расстояния 500 м, например
  • в вашей ссылке есть формула для подсчета максимального расстояния от заданной скорости и угла. Используйте это, чтобы подтвердить, что ваши переменные актуальны.
  • углы представлены значениями от -1 до 1 в cos, sin, tan. Имеет смысл, что NaN (или значения вне диапазона) означает, что ни один угол не может покрыть расстояние

Надеюсь, это немного поможет

...