Мне нужно реализовать немного Ai, который может применить импульс к жесткому телу, чтобы попасть в цель. Как пушечный мяч, стреляющий из пушки. Я использую Chipmunk Dynamics для физического движка.Расчет снаряда с динамикой бурундук
Моя математика страшна, как моя физика, но я читал, и с небольшой помощью от SO и вытекающее из этого wikipedia entry, я получил это
float x = target.x = launchPos.x;
float y = target.y = launchPos.y;
float g = 9.8;
float v = 100;
float angle1, angle2;
float tmp = pow(v, 4) - g * (g * pow(x, 2) + 2 * y * pow(v, 2));
if(tmp < 0){
NSLog(@"No Firing Solution");
}else{
angle1 = atan2(pow(v, 2) + sqrt(tmp), g * x);
angle2 = atan2(pow(v, 2) - sqrt(tmp), g * x);
}
// Split the velocities
float vVel = v * sin(angle2);
//NSLog(@"Vertical Velocity: %f", vVel);
float hVel = v/cos(angle2);
//NSLog(@"Horizontal Velocity: %f", hVel);
CGPoint force = cpv(hVel, vVel);
Который должен дать мне угол, из которого я могу рассчитать горизонтальные и вертикальные скорости, необходимые для запуска снаряда.
Однако, это не работает, что меня совершенно не удивляет по ряду причин. Во-первых, потому что я ужасен в математике и физике, но также потому, что меня смущает еще пара вещей.
Этот метод, по-видимому, не учитывает массы. Должно ли это? Я бы подумал, что это очень важно? Но потом я изучал искусство в колледже, поэтому я мог ошибаться.
Box2d имеет PTM_RATIO, но я не могу найти ничего подобного в бурундук, так как мои значения соответствуют пространственным координатам в бурундук?
Я знаю радианов и как они различаются по степеням, и как конвертировать между ними. Но что я должен здесь использовать? должен ли я преобразовывать угол1 и угол2 в градусы? Даже если я это сделаю, он все равно не работает.
Таким образом, есть много о физике и бурундук, которые я не понимаю. Поэтому я здесь, прося о помощи.
Есть ли что-то в бурундук, которое я могу использовать, чтобы понять это, или если кто-то должен был это понять, я бы очень признателен за помощь.
Вы правы относительно cos (угол). Я также предполагаю, что это cpv (hVel * pmass, vVel * pMass). Это имеет смысл, но я все еще не получаю желаемого результата. Я думаю, что гравитация может быть проблемой, я предполагаю, что бурундук имитирует гравитацию как 9.8i. – gargantuan