Пытаюсь вычислить новый угол поворота для ракеты

#math #cocos2d-iphone

#математика #cocos2d-iphone

Вопрос:

у меня есть этот код

 float angle = rocket.rotation;
float vx = sin(angle * M_PI / 180) * xVelocity;
float vy = cos(angle * M_PI / 180) * yVelocity;
CGPoint direction = ccp(vx, vy);
[rocket setPosition:ccpAdd(rocket.position, direction)];

yVelocity -= 0.2;
  

по сути, он запускает ракету в направлении, в котором я ее настроил. Это работает нормально, ракета поднимается, затем нормально опускается. Теперь мне нужно изменить вращение ракет в соответствии с новым направлением, которое я устанавливаю, чтобы ракета вращалась правильно для того, как она летит. Как я могу вычислить новый угол, который мне нужен для правильного поворота ракеты? Я предполагаю, что могу использовать новое направление для создания этого нового угла, но я не уверен, как. Спасибо

Комментарии:

1. Я предполагаю, что в вашем коде есть цикл? Где это (я не знаю cocos)? Вы пытаетесь выполнить выстрел пушечным ядром без трения (с гравитацией)?

Ответ №1:

Я не совсем уверен, что вы имеете в виду, но первая часть неточна

 float angle = rocket.rotation;
float vx = sin(angle * M_PI / 180) * xVelocity;
float vy = cos(angle * M_PI / 180) * yVelocity;
  

Чтобы определить, с какой скоростью движется ракета и в каком направлении, у вас есть два варианта:

  1. Укажите направление (угол) и скорость (как быстро это происходит в м / с)
  2. Укажите горизонтальную скорость (как быстро она движется по горизонтали в м / с) и вертикальную скорость (м / с)

Если у вас есть скорость (горизонтальная и вертикальная), вы можете рассчитать скорость и направление. А также, если у вас есть угол и скорость, вы можете рассчитать скорость (по горизонтали и вертикали). Похоже, что ваш код вычисляет скорость, исходя из направления и velocity вместо direction и speed.

 float angle = rocket.rotation;
xVelocity = sin(angle * M_PI / 180) * speed;
yVelocity = cos(angle * M_PI / 180) * speed;

yVelocity -= 0.2f;//apply gravity

//now we need to find the new angle and speed again
//speed is easy, Pythagoras helps
speed = sqrt(xVelocity*xVelocity   yVelocity*yVelocity);
//angle is more difficult, luckily atan2 solves this:
angle = atan2(yVelocity,xVelocity);

//now we can update the rocket
//Sorry, but I don't know COCOS...