Создание очень простого симулятора пушек. Изредка получаю отрицательную скорость х - PullRequest
1 голос
/ 21 ноября 2011
xVel = velocity * Math.cos(angle);
yVel = velocity * Math.sin(angle);

Это то, что я использую, чтобы преобразовать одну начальную скорость в x и y скорость, используя угол, введенный пользователем. Иногда xVel будет отрицательным. Мне было интересно, подойдет ли функция абсолютного значения Math нормально или математически искажет мои результаты.

Вот о чем я думал:

xVel = velocity * Math.abs(Math.cos(angle));

Программирование на Java. Кстати, в данном случае это не имеет значения.

РЕДАКТИРОВАТЬ: из-за отсутствия важной информации я добавлю некоторые изменения.

Иногда я буду вводить значение для угла, который находится в положительном квадранте (то есть 15 °), и все равно получаю отрицательный xVel. Также эта программа предполагает, что угол отсчитывается от оси x против часовой стрелки.

Ответы [ 7 ]

5 голосов
/ 21 ноября 2011

Вы получаете отрицательную скорость x для угла 15 градусов, потому что Math.cos и Math.sin принимают угол в радианах, а не в градусах.

Сначала необходимо преобразовать угол в градусах в угол врадианы, как это:

xVel = velocity * Math.cos(angle * Math.PI / 180.0);
yVel = velocity * Math.sin(angle * Math.PI / 180.0);
1 голос
/ 21 ноября 2011

Мне просто интересно, как вы определяете свою систему координат и получаете угол.Очень разумно получить отрицательное значение для XVel, если ваш угол находится во втором квадранте.

0 голосов
/ 21 ноября 2011

Знак косинуса и синуса одного и того же угла не всегда положительный (или отрицательный) для обеих функций. Пока вы используете функцию в научном контексте (например, в формулах), вы должны проверять, не получили ли вы еще правильный результат?

В науке вектор скорости может иметь значение меньше нуля.

0 голосов
/ 21 ноября 2011

Проверьте это, надеюсь, вы можете понять это, ActionSctipt

http://www.emanueleferonato.com/2007/04/28/create-a-flash-artillery-game-step-1/

0 голосов
/ 21 ноября 2011

Если они стреляют из пушки под углом 90 degrees < angle < 270 degrees, тогда ваша координата х будет отрицательной. Они действительно стреляют в обратном направлении, если это так.

Есть несколько способов ограничить это, но я бы порекомендовал не допускать их поворота на 90 градусов, если вы хотите установить прямой угол.

0 голосов
/ 21 ноября 2011

Может быть, вы можете просто проверить, что ваш угол находится между 0 и PI / 2. Вы получите положительные значения для обеих скоростей. Как этот угол вводится пользователем?

0 голосов
/ 21 ноября 2011

Скорость - это вектор, и вектор имеет направление, а также размер, обозначенный углом.

Если вам все равно, в каком направлении происходит движение по соответствующей оси [вправо или влево / вверх или вниз], вы можете использовать абсолютное значение. Знак [минус / плюс], который вы получаете на самом деле [и только], указывает влево / вправо и вверх / вниз

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...